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

R 列名为数字时如何使用聚合?,r,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","") aggreg

我在让
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)
库(stringr)
#这很有效

df我同意@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

agg底线是您不应该使用以数字开头的名称,因为它们不是语法名称(请参见
?make.names
)。如果你真的想,你可以重新定义聚合,这样它就可以使用非语法名称,但这可能是个坏主意。Matthew,有没有办法让它使用
符号?
names(agg) <- gsub('^X', '', names(agg))