格式化 colnames 以供 cbind 读取
Formatting colnames to be read by cbind
假设我有一个名为 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]
输出更改为 yield:
`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)"
我认为不需要反引号。是吗?
当然还有:
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))
假设我有一个名为 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]
输出更改为 yield:
`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)"
我认为不需要反引号。是吗?
当然还有:
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))