繁体   English   中英

在 data.table 中,如何使用 j 中的 ifelse() 进行子集化,并使用.N 作为子集后的观察数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM