2 回答

TA貢獻1804條經驗 獲得超2個贊
通常,base R(不是 tidy R)更容易轉換為 Python Pandas。您的 R 代碼似乎在做的是按國家/地區列對數據框進行子集化,并將每個子集運行到psych::alpha()
. 然后將提取的統計數據返回到帶有國家指標的數據框中。
您可以對基數 R 執行完全相同的操作,它可以在列表理解中by
轉換為 Pandas 。groupby
看起來psych::alpha
返回的統計數據比pingouin.cronbach_alpha
. 根據需要在未經測試的代碼中調整字段和返回值。
基礎 R (使用文檔)
# DEFINE METHOD
run_cronbach_alpha <- function(sub) {
results <- psych::alpha(sub)$total # RETURNS LIST
data.frame(country = sub$country[1],
raw_alpha = results$raw_alpha,
std.alpha = results$std.alpha,
G6 = results$G6,
average_r = results$average_r,
median_r = results$median,
mean = results$mean,
sd = results$sd)
}
# FILTER COLUMNS IN DATA FRAME
sim_short <- sim_data[c("step_bfi1_ab_cor", ..., "step_bfi39_ab_cor", "country")]
# RUN METHOD BY COUNTRY SUBSETS TO RETURN DF LIST
results_df_list <- by(sim_short, sim_short$country, run_cronbach_alpha)
# ROW BIND ALL DFs TO SINGLE FINAL DATA FRAME
results_df <- do.call(rbind.data.frame, results_df_list)
Python Pandas (使用文檔)
# DEFINE METHOD
def run_cronbach_alpha(c, sub):
results = pg.cronbach_alpha(sub.drop(["country"], axis="columns")) # RETURNS TUPLE
return pd.DataFrame({'country': c, 'cronbach_alpha': results[0], index=[0]})
# FILTER COLUMNS IN DATA FRAME
sim_short = sim_data.reindex(["step_bfi1_ab_cor", ..., "step_bfi39_ab_cor", "country"],
axis='columns')
# RUN METHOD BY COUNTRY SUBSETS TO RETURN DF LIST
results_df_list = [run_cronbach_alpha(i, df) for i,df in sim_short.groupby("country")]
# CONCATENATE ALL DFs TO SINGLE FINAL DATA FRAME
results_df = pd.concat(results_df_list)

TA貢獻1884條經驗 獲得超4個贊
def run_cronbach_alpha(c, sub):
? ? results = pg.cronbach_alpha(sub.drop(["country"], axis="columns"))? ? # RETURNS TUPLE
? ? return pd.DataFrame({'country': c, 'cronbach_alpha': results[0]}, index = ["Result"])
? ? ? ? ? ? ? ? ? ? ? ?
# RUN METHOD BY COUNTRY SUBSETS TO RETURN DF LIST
results_df_list = [run_cronbach_alpha(i, df) for i,df in sim_data.groupby("country")]
results_df_list
添加回答
舉報