R 格式化要由cbind读取的colname

R 格式化要由cbind读取的colname,r,aggregate,cbind,tapply,R,Aggregate,Cbind,Tapply,假设我有一个名为df的列表,colnames(df) "A" "B" "C" "D" "E" "F" 我希望以以下方式汇总数据: aggregate(cbind(`C`,`D`,`E`,`F`)~A+B, data = df, FUN = sum) 当

假设我有一个名为df的列表,
colnames(df)

"A"           "B"          "C"                 "D"           "E"                 "F" 
我希望以以下方式汇总数据:

aggregate(cbind(`C`,`D`,`E`,`F`)~A+B, data = df, FUN = sum)
当然,我可以“手动”完成,但在我的真实数据中,我有大量的列,因此我尝试将
colnames(df)[3:6]
输出更改为:

`C`,`D`,`E`,`F` 
相反。到目前为止,我已经尝试使用
toString(colnames(df)[3:6])

"C, D, E, F"
但是,
cbind
无法正确读取该值


有什么建议吗?

您也可以使用从子集数据框创建的矩阵,而不是
cbind

aggregate(as.matrix(df[names(df)[3:6]])~A+B, data=df, FUN=sum)
#       A     B     C     D     E     F
# 1  0.36 -0.11  2.02  2.29 -0.13 -2.66
# 2 -0.56  0.40 -0.09  1.30 -0.28 -0.28
# 3  1.37  0.63  1.51 -0.06 -1.39  0.64
或者,直接回答你的问题,试试看

(ev <- sprintf("cbind(%s)", toString(names(df)[3:6])))
# [1] "cbind(C, D, E, F)"

数据:


df尝试
aggregate(cbind(C,D,E,F)~A+B,data=df,FUN=sum)
aggregate(.~A+B,data=df,FUN=sum)
非常感谢您的回答!似乎确实需要反勾号,因为它们是作为列名的一部分从csv导入的。有没有一种简单的方法可以将它们取回,或者只是从colnames中删除它们?@WeierstraßRamirez是的,我建议使用
names(df)@WeierstraßRamirez删除它们实际上我很好奇你的数据是什么样子的,你能像我一样创建一个小示例吗?正如所述,只需使用
dput
,这是共享堆栈溢出数据的常用方法。因此,实际上,我认为问题在于R添加了反勾号,因为我的数据中有复合的colname,这是来自实际的colname(df):[1]“类别”“父级”“品牌”“媒体”“属性”“总DOL”“总单位”[8] “2011年失业救济金”“2011年单位”“2012年失业救济金”“2012单位”“2013年失业救济金”“2013单位”“2014年失业救济金”[15]“2014单位”
aggregate(eval(parse(text=ev))~A+B, data=df, FUN=sum)
#       A     B     C     D    E     F
# 1 -2.44 -1.78  1.90 -1.76 0.46 -0.61
# 2  1.32 -0.17 -0.43  0.46 0.70  0.50
# 3 -0.31  1.21 -0.26 -0.64 1.04 -1.72
df <- structure(list(A = c(-2.44, 1.32, -0.31), B = c(-1.78, -0.17, 
1.21), C = c(1.9, -0.43, -0.26), D = c(-1.76, 0.46, -0.64), E = c(0.46, 
0.7, 1.04), F = c(-0.61, 0.5, -1.72)), class = "data.frame", row.names = c(NA, 
-3L))