我正在对一个data.table进行分组,并希望从每个组中选择第一行满足x == 1的行,如果不存在这样的行,则选择具有任何x值的第一行
我正在对一个data.table进行分组,并希望从每个组中选择第一行满足x == 1的行,如果不存在这样的行,则选择具有任何x值的第一行
d <- data.table(
a = c(1,1,1, 2,2, 3,3),
x = c(0,1,0, 0,0, 1,1),
y = c(1,2,3, 1,2, 1,2)
)
这次尝试
d[, ifelse(any(.SD[,x] == 1),.SD[x == 1][1], .SD[1]), by = a]
返回 a V1
1: 1 1
2: 2 0
3: 3 1
但我期望
a x y
1: 1 1 2
2: 2 0 1
3: 3 1 1
有什么办法可以做得正确吗?
ifelse
将返回与第一个参数的长度相同的长度。(见?ifelse
) 在这种情况下,第一个参数是单个逻辑值。我将ifelse
用作最后的手段。即使在这种情况下,大多数情况下我也不使用它。并且我建议远离它。除了所有这些要记住的事情之外,它还很慢。 - Arun