R 每行无NA值计数
您可以使用R 每行无NA值计数,r,data.table,R,Data.table,您可以使用sqldf包,在R中使用SQL查询 我复制了你的DT DT[,apply..,keyby=family_id]##this code is wrong 这对您来说是正确的?这可能也适用于: total_child family_id 1 1 1 2 3 2 3 2 3 >DT$total\u child DT 家庭id年龄母亲出生孩子1出生孩子2出生孩子3总孩子 1
sqldf
包,在R
中使用SQL
查询
我复制了你的DT
DT[,apply..,keyby=family_id]##this code is wrong
这对您来说是正确的?这可能也适用于:
total_child family_id
1 1 1
2 3 2
3 2 3
>DT$total\u child DT
家庭id年龄母亲出生孩子1出生孩子2出生孩子3总孩子
1 1 30 1998-11-12 1
2 2 27 1999-12-12 1997-09-09 1999-09-01 3
3 3 29 1996-04-12 1996-09-09 2
可以做DT[,3-Reduce(“+”,lapply(.SD,is.na)),.SDcols=dob_child1:dob_child3]
或者DT[,rowSums(!is.na(.SD)),.SDcols=dob_child1:dob_child3]
删除dob_child3
中的引号,如果没有被识别为日期和计数,您还可以熔化和计数:melt(DT,measure.vars=patterns(“^dob_child”)[!is.na(value),(kids=.N),by=family_id]
@DavidArenburg非常感谢。你的答案真的是我想要的。这是一个直接的解决方案。我对DT[,(family_id,rowSums(!is.na(.SD)),.SDcols=dob_child1:dob_child3]@docendoscimus进行了一些更改。谢谢。你的答案非常鼓舞人心。
family_id<-c(1,2,3)
age_mother<-c(30,27,29)
dob_child1<-c("1998-11-12","1999-12-12","1996-04-12")##child one birth day
dob_child2<-c(NA,"1997-09-09",NA)##if no child,NA
dob_child3<-c(NA,"1999-09-01","1996-09-09")
DT<-data.table(family_id,age_mother,dob_child1,dob_child2,dob_child3)
library(sqldf)
sqldf('select distinct (count(dob_child3)+count(dob_child2)+count(dob_child1)) as total_child,
family_id from DT group by family_id')
total_child family_id
1 1 1
2 3 2
3 2 3
> DT$total_child <- as.vector(rowSums(!is.na(DT[, c("dob_child1",
"dob_child2", "dob_child3")])))
> DT
family_id age_mother dob_child1 dob_child2 dob_child3 total_child
1 1 30 1998-11-12 <NA> <NA> 1
2 2 27 1999-12-12 1997-09-09 1999-09-01 3
3 3 29 1996-04-12 <NA> 1996-09-09 2