1

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

我究竟做错了什么?

4

1 回答 1

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))
于 2013-01-17T05:11:44.300 回答