R语言数据框新增均值列报错:找不到%>%<-函数求解决
R语言用dplyr创建均值新列的错误修正
错误原因
你遇到的konnte Funktion "%>%<-" nicht finden错误,是因为错误地将管道符%>%和直接赋值操作$<-结合使用。管道符的作用是把左侧的数据对象传递给右侧的函数作为第一个参数,不能直接跟赋值语句串联;同时你的代码逻辑混乱,一边试图生成新数据框data_new2,一边直接修改原数据框data1,不符合dplyr的使用规范。
修正后的代码
使用dplyr的mutate()函数是添加新列的标准方式,推荐用rowMeans()(比apply(...,1,mean)更高效)来计算行均值,代码如下:
# 确保已加载dplyr library(dplyr) data_new2 <- data1 %>% mutate( # 计算多列行均值,na.rm根据是否需要忽略NA值调整 chronisch = rowMeans(select(., c(22,28,31,25)), na.rm = FALSE), # 单列的均值就是原列值,这里保持统一写法 Sozial = rowMeans(select(., 33), na.rm = FALSE), überforderung = rowMeans(select(., c(30,24,27)), na.rm = FALSE), Anerkennung = rowMeans(select(., c(26,29)), na.rm = FALSE), Arbeit = rowMeans(select(., c(23,32)), na.rm = FALSE) )
如果坚持使用apply函数,也可以在mutate()中调用:
data_new2 <- data1 %>% mutate( chronisch = apply(select(., c(22,28,31,25)), 1, mean), Sozial = apply(select(., 33), 1, mean), überforderung = apply(select(., c(30,24,27)), 1, mean), Anerkennung = apply(select(., c(26,29)), 1, mean), Arbeit = apply(select(., c(23,32)), 1, mean) )
关键说明
select(., 列编号)中的.代表管道传递过来的data1,用于选中指定列;如果知道列名,也可以直接用列名代替编号,比如select(., col1, col2)。rowMeans()的na.rm参数:如果数据中存在NA值,设置na.rm = TRUE可忽略NA计算均值,否则结果会返回NA,根据你的数据情况调整。- 修正后的代码不会修改原数据框
data1,只会生成新的data_new2,符合dplyr的非破坏性操作原则。
内容的提问来源于stack exchange,提问作者rstock13
相关产品推荐
相关产品推荐

