Ste*_*pré 4 r dplyr data.table
考虑以下数据框:
df <- data.frame(replicate(5,sample(1:10, 10, rep=TRUE)))
如果我想将每一行除以其总和(以进行概率分布),我需要执行以下操作:
df %>% mutate(rs = rowSums(.)) %>% mutate_each(funs(. / rs), -rs) %>% select(-rs)
这真的感觉效率低下:
rs列rowSums()使用现有列时,感觉更自然:
df %>% summarise_each(funs(weighted.mean(., X1)), -X1)
使用dplyr,是否有更好的方法来处理临时列(即时创建)而不是在处理后添加和删除它们?
我也对如何data.table处理这样的任务感兴趣。
正如我在上面的评论中提到的,我认为将数据保存在 adata.frame或 a 中没有意义data.table,但如果必须,以下将在不转换为矩阵的情况下进行,并说明如何在的data.table j-expression:
dt = as.data.table(df)
dt[, names(dt) := {sums = Reduce(`+`, .SD); lapply(.SD, '/', sums)}]
Run Code Online (Sandbox Code Playgroud)