r - 通过分组汇总数据时出现“无法创建对不可调用对象的调用”错误
问题描述
我有以下数据框:
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 对这些数据进行分组,并构建一个新的数据框,显示每个家庭中成年女性、成年男性、学龄儿童和学龄前儿童的数量。我想得到这样的东西:
# 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
解决方案
问题在于列类型。这些是factor
通过引用'TRUE'/'FALSE'
结果character
类型创建的列。但是,data.frame
默认情况下调用使用stringsAsFactors = TRUE
. 因此,我们得到factor
这些列的类。这可以通过简单地取消引用TRUE/FALSE
输入来避免。假设输入已经被引用,然后将其转换为logical
withas.logical
然后sum
通过 'NR_HH' 得到分组后
df %>%
mutate_at(4:7, as.logical) %>%
group_by(NR_HH) %>%
summarise_if(is.logical, sum)
# A tibble: 2 x 5
# NR_HH Fem_Adult Male_Adult School_Child Preschool_Child
# <fct> <int> <int> <int> <int>
# 1 HH1 1 1 1 1
# 2 HH2 2 0 0 0
推荐阅读
- node.js - 反应不读取 docker-compose 环境变量
- html - 跳转到其他网页上的thymeleaf-iterated部分
- python - 如何在派生类中正确访问和设置类变量?
- flutter - 无法使用 FutureBuilder 调用从 SharedPreferences 获取列表数据
- web-scraping - 如何使用 Cloud Run 或 Cloud Functions 访问在 GCP 服务上有 ip 阻止的网站
- fortran - 复数矩阵类的 Fortran 运算符赋值(=)
- xml - 如何对 XSLT 中的子节点求和
- python - 分段错误 python main.py
- c# - 在地图上画一条线以显示路线
- google-chrome - YouTube 嵌入式播放器是否支持在跨源隔离站点中加载?