R语言中如何提取男性子样本TOTINCP值计算对应分位数
错误根因
- 你写的
incomeMale <- c(male, TOTINCP)存在两处问题:male是数据框结构,用c()拼接会把整个数据框的所有列都拉平为列表,不会单独提取TOTINCP列- 你之前调用了
attach(data1),导致直接写TOTINCP时调用的是全数据集的收入列,而非男性子样本的收入列
quantile()函数的概率参数需要传入一个数值向量,你当前的写法会把0.1、0.9等错误传给na.rm等后续参数,无法得到你要的四个分位结果
可行解决方案
1. Base R写法
library("tidyverse") data1 <- read_csv("1986Census.csv", col_names = TRUE) # 筛选符合条件的样本 dropped <- subset(data1, 26 <= AGEP & AGEP <= 64 & TOTINCP >= 0 & MARSTP != 1 & MARSTP != 5) # 提取男性子样本的TOTINCP向量 incomeMale <- subset(dropped, SEXP == 2)$TOTINCP # 计算指定分位值,na.rm=TRUE可自动跳过缺失值 quantile(incomeMale, probs = c(0.05, 0.1, 0.9, 0.95), na.rm = TRUE)
输出结果的四个值依次对应*后5%、后10%、前10%、前5%*的分位值。
2. Tidyverse管道写法(更简洁,避免中间变量混淆)
library(tidyverse) read_csv("1986Census.csv", col_names = TRUE) %>% # 逐层筛选符合要求的男性样本 filter(AGEP >= 26, AGEP <=64, TOTINCP >= 0, !MARSTP %in% c(1,5), SEXP == 2) %>% # 单独提取TOTINCP列作为向量 pull(TOTINCP) %>% # 计算分位数 quantile(probs = c(0.05, 0.1, 0.9, 0.95), na.rm = TRUE)
内容的提问来源于stack exchange,提问作者user17067764
相关产品推荐
相关产品推荐

