R语言Dataframe三类分类变量整合及关联分析问题咨询
解决方案
1. 数据结构转换(宽表转长表)
你当前的关系主题是以列维度延展的宽表结构,首先要转换为长表,让所有分类变量都以单独列的形式存在,方便后续分组调用。可直接用tidyverse套件完成操作,同时你原有的筛选代码可以用%in%运算符简化,不需要重复写判断条件:
library(tidyverse) # 筛选目标国家+宽表转长表 df_long <- df_full %>% # 筛选指定6个国家 filter(Country %in% c("GER", "CH", "UK", "US", "IN", "JP")) %>% # 把10个关系主题的列转为行,names_to指定新生成的主题列名,values_to指定主题是否出现的标记列名 pivot_longer(cols = c("Bel_Insp", "Emb_Real", "Excitement", "Good_Deed", "New_Real", "New_Rel", "Rel_Resc", "Rel_Togeth", "Rel_Warmth", "Transf_Reb"), names_to = "relationship_theme", values_to = "is_appear") %>% # 仅保留主题实际出现的记录(如果你的主题列值为0/1标记是否出现,可保留这行) filter(is_appear == 1)
2. 合并文化维度数据
如果你的文化维度数据是单独存储的表,直接用国家字段作为关联主键合并到上面的长表即可:
# 假设文化维度表名为df_culture,关联键为Country df_final <- df_long %>% left_join(df_culture, by = "Country")
3. 输出表结构说明
最终生成的df_final每一行对应一条「特定国家下某类关系主题出现」的记录,所有你需要的分类变量都已单独成列:
Country:共6个水平,对应你筛选的6个国家relationship_theme:共10个水平,对应10类关系主题- 6个文化维度字段:和国家一一对应
后续需要统计频次、分组绘制直方图都可以直接用这三类变量作为分组因子,比如统计每个文化维度下各关系主题的出现频次代码如下:
theme_culture_freq <- df_final %>% group_by(你的文化维度列名, relationship_theme) %>% summarise(freq = n(), .groups = "drop")
内容的提问来源于stack exchange,提问作者Jannike
相关产品推荐
相关产品推荐

