R语言数据集按Gemeinde分组,基于国家分类求和的实现问题
R语言数据分组统计解决方案
原始数据集
Gemeinde <- c("Adliswil", "Adliswil", "Adliswil", "Adliswil", "Adliswil","Adlikon", "Adlikon", "Adlikon", "Adlikon", "Adlikon") Country <- c("Schweiz", "Deutschland", "Frankreich", "Türkei", "China","Schweiz", "Deutschland", "Frankreich", "Türkei", "China") Count <- c(23, 41, 32, 58, 26,23, 41, 32, 58, 26) df <- data.frame(Gemeinde, Country, Count) print(df)
需求说明
将Country字段中属于"Frankreich"、"Deutschland"、"Schweiz"的记录归为瑞士类,其余归为外国类;按Gemeinde字段分组后,分别统计两类的Count字段总和。
原代码问题
原代码存在多处错误:
- 变量名不匹配:原数据集使用
df、Count、Country,但代码里误用了country_count、Anzahl、Staatsangehörigkeit - 条件逻辑错误:用
== "Frankreich & Deutschland & Schweiz"无法匹配三个目标国家,需用%in%判断是否属于指定列表 - 外国类求和逻辑错误:未排除瑞士类数据,导致总和计算错误
正确实现代码
library(dplyr) # 新增分类标记列 df <- df %>% mutate(Group = ifelse(Country %in% c("Frankreich", "Deutschland", "Schweiz"), "瑞士类", "外国类")) # 按Gemeinde分组统计两类总和 result <- df %>% group_by(Gemeinde) %>% summarize( sumSwiss = sum(Count[Group == "瑞士类"]), sumForeign = sum(Count[Group == "外国类"]) ) print(result)
输出结果
运行代码后得到如下结果:
# A tibble: 2 × 3 Gemeinde sumSwiss sumForeign <chr> <dbl> <dbl> 1 Adlikon 96 84 2 Adliswil 96 84
若需转换为普通data.frame格式,可添加as.data.frame():
result_df <- as.data.frame(result) print(result_df)
内容的提问来源于stack exchange,提问作者MisterCoder
相关产品推荐
相关产品推荐

