我在让aggregate
处理具有“数字”变量名称的数据框时遇到问题。这是一个例子:
library(stringr)
# this works
df <- data.frame(x001=runif(10),x002=runif(10),category=rep(1:2,5))
aggregate(. ~ category, data=df, mean)
# this doesn't
names(df) <- str_replace(names(df),"x","")
aggregate(. ~ category, data=df, mean)
我做错了什么?
答案 0 :(得分:2)
我同意@ orizon关于使用非标准名称的观点,但为了回答你的问题,你可以勾选这些名字。
aggregate(cbind(`001`, `002`) ~ category, data=df, mean)
# category `001` `002`
# 1 1 0.6600887 0.3927709
# 2 2 0.5115426 0.5189629
这会更好,更通用:
agg <- aggregate(. ~ category, data=setNames(df, make.names(names(df))), mean)
# category X001 X002
# 1 1 0.7426327 0.4081779
# 2 2 0.6666881 0.5903070
如果您真的想在汇总中使用坏名称:
names(agg) <- gsub('^X', '', names(agg))