R 在data.table中,如何在j中使用ifelse()进行子集,并在子集后使用.N作为观察数?
我有一个数据表,其中我使用数据表的R 在data.table中,如何在j中使用ifelse()进行子集,并在子集后使用.N作为观察数?,r,if-statement,data.table,R,If Statement,Data.table,我有一个数据表,其中我使用数据表的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]
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
中的ifelse()
语句获取新变量
编辑:对于我来说,在
j
中加入子集有非常重要的原因,我现在无法准确地回忆起来。我只想说,我的实际代码太乱了,我不想再把它拆开我希望这对将来的其他人也有用,只是作为一种选择。这里有一种复制newvari
的方法。您可以使用ifelse()
,但是fielse()
是它的数据。表版本
testdata[, newvarj := fifelse(x > 0, sum(x > 0), NA_real_), by = id]
下面是一种复制newvari
的方法。您可以使用ifelse()
,但是fielse()
是它的数据。表版本
testdata[, newvarj := fifelse(x > 0, sum(x > 0), NA_real_), by = id]
很有趣,谢谢!但它没有.N那么灵活,对吗?像testdata[,newvarj:=fifelse(x>0,1:sum(x>0),NA\u real\ux),by=id]这样的东西在这里不起作用。你知道为什么吗?@PeterPan如果在ifelse语句中有一个比测试长的“是”,那是行不通的。很有趣,谢谢!但它没有.N那么灵活,对吗?像testdata[,newvarj:=fifelse(x>0,1:sum(x>0),NA\u real\ux),by=id]这样的东西在这里不起作用。你知道为什么吗?@PeterPan如果有比ifelse语句中的测试长的“Yes”是行不通的。