data.table:列名不能与j = c()和by一起使用

时间:2017-09-04 13:30:02

标签: r data.table

难以表达我的问题(因此难以在档案中有效搜索......)。下面的代码应该清楚。

为什么在第二个命令中输出的最后一个列名不是“nb_ob”? c(lapply(.SD, mean), nb_obs = .N)应该提供一个带有4个元素的命名列表,这些元素应该成为最终结果中的列。

奇怪地c(lapply(.SD[,1:4], mean), nb_obs = .N)(第三个命令)提供了预期的结果。如果我删除by参数(最后一个命令),我也会获得预期的列名(对于字符列“Species”有警告)。

代码使用data.table_1.10.4,R版本3.4.1运行Ubuntu 16.04.3 LTS(如果需要,我可以提供更多)

iris <- data.table(iris)
iris[, c(lapply(.SD, mean), nb_obs = .N), by = Species] # 2nd command
#       Species Sepal.Length Sepal.Width Petal.Length Petal.Width  N
# 1:     setosa        5.006       3.428        1.462       0.246 50
# 2: versicolor        5.936       2.770        4.260       1.326 50
# 3:  virginica        6.588       2.974        5.552       2.026 50

iris[, c(lapply(.SD[,1:4], mean), nb_obs = .N), by = Species] # 3rd command
#       Species Sepal.Length Sepal.Width Petal.Length Petal.Width nb_obs
# 1:     setosa        5.006       3.428        1.462       0.246     50
# 2: versicolor        5.936       2.770        4.260       1.326     50
# 3:  virginica        6.588       2.974        5.552       2.026     50

iris[, c(lapply(.SD, mean), nb_obs = .N)] # Fourth command
#    Sepal.Length Sepal.Width Petal.Length Petal.Width Species nb_obs
# 1:     5.843333    3.057333        3.758    1.199333      NA    150

1 个答案:

答案 0 :(得分:0)

这是基于以下问题而提出的data.table项目积压中的一个问题:


此答案基于上面@Frank的评论。