在R语言中对多观测行求和:合并问卷正负态度百分比
解决R语言中问卷态度百分比行求和问题
假设你的数据集名为df,行顺序为:行1=完全同意、行2=有点同意、行3=有点不同意、行4=完全不同意。以下是两种简单实现方法,适合新手操作:
方法一:基础R操作(无需额外安装包)
这是最直接的方式,不需要安装任何扩展包:
# 1. 计算正向态度总和(完全同意+有点同意) positive_sum <- colSums(df[1:2, ]) # 2. 计算负向态度总和(有点不同意+完全不同意) negative_sum <- colSums(df[3:4, ]) # 3. 将结果组合成新的数据框 result_df <- data.frame(rbind(positive_sum, negative_sum)) # 4. 给结果行命名(可选,方便识别) rownames(result_df) <- c("正向态度", "负向态度") # 查看最终结果 print(result_df)
示例验证
用你给出的样例数据测试:
# 构造样例数据集 df <- data.frame( Albania = c(13.3, 56.3, 21.3, 8.9), Andorra = c(18.0, 45.3, 27.2, 9.4), Azerbaijan = c(14.9, 27.2, 28.0, 5.2) ) # 执行上述代码后,输出结果与你期望的一致(注:样例中Azerbaijan正向求和应为42.1,推测是你输入时的笔误)
方法二:使用dplyr包(适合后续复杂数据处理)
如果你之后需要频繁处理数据,可以用dplyr包实现,先安装并加载包:
install.packages("dplyr") library(dplyr) result_df <- df %>% # 给每行标记态度类型 mutate(态度组 = rep(c("正向态度", "正向态度", "负向态度", "负向态度"), ncol(df))) %>% # 转置后按态度组求和 t() %>% as.data.frame() %>% group_by(V5) %>% summarise(across(V1:V4, sum)) %>% # 转置回原格式并整理 t() %>% as.data.frame() %>% setNames(c("正向态度", "负向态度")) %>% slice(-1)
不过这个方法对新手稍复杂,推荐先用基础R方法完成需求。
关键注意事项
- 务必保证数据集的行顺序严格对应问卷选项:行1=完全同意、行2=有点同意、行3=有点不同意、行4=完全不同意,否则求和结果会出错。
- 如果你的数据集是用文字行名标记的(比如行名为"完全同意"),可以用
df[c("完全同意", "有点同意"), ]来选取对应行求和。
内容的提问来源于stack exchange,提问作者ouroboro
相关产品推荐
相关产品推荐

