R语言select_函数报错:无适用于整数/数值类对象的方法如何解决?
修复你的dplyr代码问题
你的报错核心原因有两个,我一步步给你拆解:
1. 缺少管道符连接操作
你在filter(!is.na(race))之后没有用%>%把处理后的数据集传递给select,导致select没有接收数据框,反而直接处理race$African_American这个单独的数值向量——而select是专门用来操作数据框的函数,自然会报错说“没有适用于integer/numeric对象的select_方法”。
2. select中不需要用race$前缀
当你用管道符%>%传递数据框时,后续的dplyr函数已经默认操作这个传递过来的数据框,直接写列名就行,完全不需要再加数据集前缀。
修复后的基础代码
如果你只是想提取指定列并去掉race列为NA的行,代码应该是这样:
library(dplyr) race_mut <- race %>% filter(!is.na(race)) %>% # 用%>%连接到下一个操作 select(African_American, White, Hispanic, Asian, Other) # 直接写目标列名 race_mut
补充:如果你的目标是统计每个种族的计数
从你描述的“提取这些列的计数来构建新数据集”来看,可能你想要的是每个种族的总人数(比如这些列是0/1的指示变量,1代表属于该种族)。这种情况下可以用summarize来计算每列的总和:
race_counts <- race %>% filter(!is.na(race)) %>% summarize( African_American = sum(African_American, na.rm = TRUE), White = sum(White, na.rm = TRUE), Hispanic = sum(Hispanic, na.rm = TRUE), Asian = sum(Asian, na.rm = TRUE), Other = sum(Other, na.rm = TRUE) ) # 或者转成长格式,更便于后续可视化或分析 race_long_counts <- race %>% filter(!is.na(race)) %>% select(African_American, White, Hispanic, Asian, Other) %>% tidyr::pivot_longer(everything(), names_to = "Race", values_to = "IsMember") %>% group_by(Race) %>% summarize(Total_Count = sum(IsMember, na.rm = TRUE))
内容的提问来源于stack exchange,提问作者kvritza
相关产品推荐
相关产品推荐

