gpt4 book ai didi

r - data.table 聚合遇到 NA 问题

转载 作者:行者123 更新时间:2023-12-02 09:29:48 25 4
gpt4 key购买 nike

我正在使用 data.table 包将给定位置的每个时间段内具有多个观测值的面板聚合到一个时间段内具有唯一观测值的面板中-地点。但是,我在汇总 NA 的观察结果时遇到了困难。虽然这很有效:

set.seed(123)
data.frame(name = c("a", "a", "a", "b", "b", "b"), t = rep(c(1,2),3), x1 = sample(0:10,6), x2 = sample(0:10,6))
f1

name t x1 x2
a 1 3 5
a 2 7 8
a 1 10 4
b 2 9 3
b 1 6 6
b 2 0 2

f2 <- setDT(f1)[, lapply(.SD, sum(x, na.rm = TRUE)), by = .(name,t), .SDcols = c("x1", "x2")]
f2

name t x1 x2
a 1 13 9
a 2 7 8
b 2 9 5
b 1 6 6

添加 NA 会阻止 sum() 工作:

f1[1,3] <- NA
f1
name t x1 x2
a 1 NA 5
a 2 7 8
a 1 10 4
b 2 9 3
b 1 6 6
b 2 0 2

f2 <- setDT(f1)[, lapply(.SD, sum(x, na.rm = TRUE)), by = .(name,t), .SDcols = c("x1", "x2")]
f2
name t x1 x2
a 1 NA 9
a 2 7 8
b 2 9 5
b 1 6 6

而 a 的 x1 值,1 应该是 10。知道为什么即使里面有 na.rm 参数也会发生这种情况吗?谢谢。

最佳答案

这是一个将括号放置在正确位置的问题。您应该使用 lapply(.SD, sum, na.rm = TRUE) 而不是 lapply(.SD, sum(x, na.rm = TRUE))。使用 lapply 时,您必须在调用 sum 之后而不是在 调用内部添加 sum 函数的额外参数>总和。此外,您不需要 sum(x) 中的 (x) 部分。由于 lapply 的结构为 lapply(X, FUN, ...),因此 FUN 部分中指定的函数会自动应用于X 部分中的变量。

所以,你的代码应该是:

setDT(f1)[, lapply(.SD, sum, na.rm = TRUE), by = .(name,t)]

给出:

   name t x1 x2
1: a 1 0 11
2: a 2 5 9
3: b 2 18 12
4: b 1 1 4

注意:我将 .SDcols = c("x1", "x2") 部分保留在代码之外,因为在本例中不需要它。包含它会给你相同的结果。

关于r - data.table 聚合遇到 NA 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34342676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com