循环并将相同的dplyr函数应用于多个列
假设在R中有这样一个数据帧:循环并将相同的dplyr函数应用于多个列,r,dplyr,R,Dplyr,假设在R中有这样一个数据帧: df <- data.frame(factor1 = c("A","B","B","C"), factor2 = c("M","F","F","F"), factor3 = c("0", "1","1","0"), value = c(23,32,4,1)) 现在我想对所有因子列都这样做(想想100个因子变量)。在dplyr中有这样做的方法吗?我也在考虑对名称(d
df <- data.frame(factor1 = c("A","B","B","C"),
factor2 = c("M","F","F","F"),
factor3 = c("0", "1","1","0"),
value = c(23,32,4,1))
现在我想对所有因子列都这样做(想想100个因子变量)。在dplyr中有这样做的方法吗?我也在考虑对
名称(df)
进行循环,但我将变量作为字符串获取,groupby()
不接受字符串。只需将数据放在长格式中即可
library(tidyr)
df %>% gather(key = factor, value = level, -value) %>%
group_by(factor, level) %>%
summarize(mean = mean(value))
# factor level mean
# (chr) (chr) (dbl)
# 1 factor1 A 23.00000
# 2 factor1 B 18.00000
# 3 factor1 C 1.00000
# 4 factor2 F 12.33333
# 5 factor2 M 23.00000
# 6 factor3 0 12.00000
# 7 factor3 1 18.00000
要真正构建一个循环,vignette是正确的起点。非常感谢!您知道您是否可以在for循环中迭代列名来实现这一点吗?有一个数据帧列表可能很有用,每个因素对应一个。为什么要循环?如果您想在末尾列出数据帧列表,请使用上面的结果并拆分(result,result$factor)
。它在其他情况下可能会很有用。我想我更想知道如何在dplyr中使用列名而不命名它们。例如:df%>%filter(names(df)[1]==“A”)
不起作用,但可能类似的东西会起作用?@Gregor我不清楚你为什么推荐混合评估小插曲。也许你是说那个?那确实是我的意思。
library(tidyr)
df %>% gather(key = factor, value = level, -value) %>%
group_by(factor, level) %>%
summarize(mean = mean(value))
# factor level mean
# (chr) (chr) (dbl)
# 1 factor1 A 23.00000
# 2 factor1 B 18.00000
# 3 factor1 C 1.00000
# 4 factor2 F 12.33333
# 5 factor2 M 23.00000
# 6 factor3 0 12.00000
# 7 factor3 1 18.00000