如何阻止R数据框将计数值解析为新增列?数据框构建问题
问题根源
你用count(filter(df1, a_b == "a"))得到的df1a是数据框(默认包含一列n存储计数结果),不是单个数值。当你把多个这样的数据框塞进c()里时,R会把每个数据框的列当成独立元素拆分,所以最终生成了C.n1、C.n2这类多列,而非合并成单一的C列。
解决步骤
1. 提取单个计数值
把每个count()的结果提取成单个数值,而非保留数据框:
# 用dplyr的pull()提取n列的数值 df1a <- count(filter(df1, a_b == "a")) %>% pull(n) df1b <- count(filter(df1, a_b == "b")) %>% pull(n) # 同理处理df2a到df12b,确保每个变量都是单个数字
再构建目标数据框:
X <- data.frame( A = rep(c('1','2','3','4','5','6','7','8','9','10','11','12'), each=2), B = rep(c('a','b'), times=12), C = c(df1a, df1b, df2a, df2b, df3a, df3b, ..., df12a, df12b) )
2. 优化代码(避免手动创建12组变量)
手动写12个dfxa、dfxb太繁琐,推荐用列表批量处理:
# 先把所有原始数据集df1到df12放进列表 df_list <- list(df1, df2, df3, df4, df5, df6, df7, df8, df9, df10, df11, df12) # 批量统计每个数据集里a和b的出现次数 count_vec <- lapply(df_list, function(data) { # 对每个数据集,统计a_b的频次,然后提取数值 count(data, a_b) %>% pull(n) }) %>% unlist() # 把列表转成一维向量 # 构建最终数据框 X <- data.frame( A = rep(as.character(1:12), each=2), B = rep(c('a','b'), times=12), C = count_vec )
内容的提问来源于stack exchange,提问作者xVulpes16
相关产品推荐
相关产品推荐

