列名是数字时如何使用聚合?

时间:2013-01-17 04:53:27

标签: r

我在让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)

我做错了什么?

1 个答案:

答案 0 :(得分:2)

我同意@ orizo​​n关于使用非标准名称的观点,但为了回答你的问题,你可以勾选这些名字。

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))