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