R语言如何按列中单个元素而非列本身分组进行数据汇总?
解决方案
要实现按String列的单个元素分组并计算对应Numeric列的均值,你需要先将嵌套的字符串列拆分成单独的行,再进行分组汇总。具体步骤如下:
- 加载所需的tidyverse工具包(包含dplyr和tidyr):
library(tidyverse)
- 使用
unnest()函数将String列中的每个元素拆分为独立行,同时保留对应行的Name和Numeric值:
df_unnested <- df %>% unnest(String)
拆分后的中间结果示例:
# A tibble: 12 × 3 Name Numeric String <chr> <dbl> <chr> 1 Python 9 ABCD 2 Python 9 A 3 Python 9 AB 4 R 14 XYZ 5 R 14 Q 6 R 14 ABCD 7 Java 3 AB 8 Java 3 A 9 SQL 6 AB 10 SQL 6 A 11 SQL 6 XYZ 12 Excel 20 AB 13 Excel 20 Q
- 按拆分后的String元素分组,计算对应Numeric列的均值:
df_result <- df_unnested %>% rename(string_element = String) %>% group_by(string_element) %>% summarize(mean_numeric = mean(Numeric))
最终得到的目标结果:
# A tibble: 5 × 2 string_element mean_numeric <chr> <dbl> 1 A 6 2 AB 9.5 3 ABCD 11.5 4 Q 17 5 XYZ 10
补充说明
unnest()是tidyr包的核心函数,专门用于展开嵌套的列表/向量列,将每个元素映射为单独的行。- 无论你的String列存储的是向量还是列表类型,
unnest()都能直接处理。
内容的提问来源于stack exchange,提问作者R2022
相关产品推荐
相关产品推荐

