在R中,简化了长的data.table命令(可能结合了Data.table的“group by”、lapply和一个列名向量)

2sbarzqh  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(141)

此问题在此处已有答案

Summarizing multiple columns with data.table(1个答案)
Using dynamic column names in data.table(1个答案)
昨天关门了。
我反复使用data.table命令,使用www.example.com语句将相同的函数应用于一堆列group.by,并且我无法简化/概括命令。例如,下面的“output”是正确的,但我认为应该可以编写一个更简洁的命令来实现相同的输出。“output_fail”是我尝试这样做的:

library(data.table)

df <- data.table(a = c(1, 1, 2, 2),
                 b = c(2, 4, 6, 6),
                 c = c(1, 3, 7, 10),
                 d = c(1, 5, 1, 5)
                 )

output = df[, .(b = sum(b, na.rm = TRUE),
                c = sum(c, na.rm = TRUE), 
                d = sum(d, na.rm = TRUE)
                ),
            by = a]

cols = c('b', 'c', 'd')

output_fail <- df[,(cols) := lapply(cols, function(x) sum(x, na.rm = TRUE))
                           , by = a
]

我怎样才能写一行代码,在给定“cols”的情况下更干净地生成输出?

pftdvrlh

pftdvrlh1#

我们可以使用mget来获取cols中的列,并对它们应用sum函数:

df[, lapply(mget(cols), sum, na.rm = TRUE), by = a]

   a  b  c d
1: 1  6  4 6
2: 2 12 17 6

相关问题