[英]In data.table, How can I subset with ifelse() in j and use .N as the number of observations after the subset?
我有一个数据表,我在其中使用数据表j
部分的ifelse()
命令进行子集化。 我想计算这个子集中的观察次数(而不是整个组的观察)。 如果我使用i
部分,没问题:
library("data.table")
set.seed(1234)
testdata <- data.table(x= rnorm(10),
id= rep(c("a","b"), each =5))
testdata[x > 0, newvari := .N, by= id]
testdata
x id newvari
1: -1.2071 a NA
2: 0.2774 a 3
3: 1.0844 a 3
4: -2.3457 a NA
5: 0.4291 a 3
6: 0.5061 b 1
7: -0.5747 b NA
8: -0.5466 b NA
9: -0.5645 b NA
10: -0.8900 b NA
但是,如果我使用j
,则该组由其总大小决定(很可能是因为我没有在i
中设置子集,并且.N
仍然算在内)。
x id newvari newvarj
1: -1.2071 a NA NA
2: 0.2774 a 3 5
3: 1.0844 a 3 5
4: -2.3457 a NA NA
5: 0.4291 a 3 5
6: 0.5061 b 1 5
7: -0.5747 b NA NA
8: -0.5466 b NA NA
9: -0.5645 b NA NA
10: -0.8900 b NA NA
有没有办法在j
中使用ifelse()
语句来获取 newvari ?
编辑:我现在无法完全回忆起在j
中进行子集化的非常重要的原因。 我只想说我的实际代码太乱了,我不想再把它拆开。 ;) 我希望这可能对其他人有用,作为一种选择。
这是复制newvari
的一种方法。 您可以使用ifelse()
但fifelse()
是它的data.table
版本。
testdata[, newvarj := fifelse(x > 0, sum(x > 0), NA_real_), by = id]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.