我有以下数据框:
df <- data.frame(NR_HH = c('HH1','HH1','HH1','HH1','HH2','HH2'), ID = c(11,12,13,14,21,22), Age = c(28,25,16,4,45,70), Fem_Adult = c('FALSE','TRUE','FALSE','FALSE', 'TRUE','TRUE'),Male_Adult = c('TRUE','FALSE','FALSE','FALSE', 'FALSE','FALSE'), School_Child = c('FALSE','FALSE','TRUE','FALSE', 'FALSE','FALSE'), Preschool_Child = c('FALSE','FALSE','FALSE','TRUE', 'FALSE','FALSE'))
# NR_HH ID Age Fem_Adult Male_Adult School_Child Preschool_Child
#1 HH1 11 28 FALSE TRUE FALSE FALSE
#2 HH1 12 25 TRUE FALSE FALSE FALSE
#3 HH1 13 16 FALSE FALSE TRUE FALSE
#4 HH1 14 4 FALSE FALSE FALSE TRUE
#5 HH2 21 45 TRUE FALSE FALSE FALSE
#6 HH2 22 70 TRUE FALSE FALSE FALSE
我想通过NR_HH对这些数据进行分组,并 Build 一个新的数据框,显示每个家庭中的女性成年人,男性成年人,学龄儿童和学龄前儿童的数量 . 我想得到这样的东西:
# NR_HH Fem_Adult Male_Adult School_Child Preschool_Child
#1 HH1 1 1 1 1
#2 HH2 2 0 0 0
我尝试了以下代码:
df_summary =df%>%group_by(NR_HH)%>%summarise_if(is.logical, sum)
但我得到这个错误:
Error: Can't create call to non-callable object
1 回答
问题在于列类型 . 这些是通过引用
'TRUE'/'FALSE'
创建的factor
列,其结果为character
类型 . 但是,默认情况下data.frame
调用使用stringsAsFactors = TRUE
. 因此,我们为这些列获取了factor
class . 只需取消选择TRUE/FALSE
输入即可避免这种情况 . 假设输入已经被引用,然后使用as.logical
将其转换为logical
,然后在'NR_HH'分组后获取sum