【发布时间】:2017-07-26 08:45:09
【问题描述】:
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)
现在我有了 DT,我如何使用这个表来知道每个家庭有多少孩子,使用如下语法:
DT[,apply..,keyby=family_id]##this code is wrong
【问题讨论】:
-
可以
DT[, 3 - Reduce("+", lapply(.SD, is.na)), .SDcols = dob_child1:dob_child3]或DT[, rowSums(!is.na(.SD)), .SDcols = dob_child1:dob_child3] -
删除
dob_child3中NA上的引号,如果没有被识别为日期并计数 -
你也可以融算:
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] 做了一些更改
-
@docendodiscimus 谢谢。你的回答很有启发性。
标签: r data.table