You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中按年龄分组统计不同词提示的联想词频率?

解决方案:按年龄分组统计不同提示下的联想词频率

我来帮你解决这个按年龄分组统计不同提示下联想词频率的问题,这里有两种常用的方法,你可以根据自己的习惯选择:

第一步:先创建年龄分组列

首先需要把你的原始数据中的年龄转换成指定的三个分组(15-30、31-45、46-60),假设你的数据框testdata里有一个名为age的列记录参与者年龄,用以下代码生成分组:

# 创建年龄分组列
testdata$age_group <- cut(testdata$age, 
                          breaks = c(14, 30, 45, 60), 
                          labels = c("15-30", "31-45", "46-60"),
                          include.lowest = TRUE)
  • breaks设置分组的分界点,14确保15岁被包含在第一个组
  • labels指定每个分组的名称,和你需要的列名格式匹配
  • include.lowest = TRUE保证最小的年龄值(15)被包含在第一个组中

方法一:用Tidyverse(dplyr + tidyr)批量处理(推荐)

这个方法代码更简洁,适合批量处理所有提示,不需要逐个手动处理:

library(dplyr)
library(tidyr)

# 1. 分组统计每个提示、年龄组下的联想词频率
freq_summary <- testdata %>%
  group_by(prompt, age_group, typedWord) %>%
  summarise(freq = n(), .groups = "drop")  # 统计每个组合的出现次数

# 2. 将数据转换为宽格式,生成你需要的列名(比如freqMedia15-30)
wide_freq_table <- freq_summary %>%
  mutate(col_name = paste0("freq", prompt, age_group)) %>%  # 拼接列名
  select(-prompt, -age_group) %>%
  pivot_wider(names_from = col_name, values_from = freq, values_fill = 0)  # 转宽格式,缺失值填0

# 3. 将频率列合并回原始数据(如果需要在原数据中查看每个词的对应频率)
testdata_with_freq <- testdata %>%
  left_join(wide_freq_table, by = "typedWord")

完成后,testdata_with_freq中就会包含所有类似freqMedia15-30、freqFood31-45的列,每个列对应指定提示和年龄组下该联想词的出现频率。


方法二:用Base R循环处理

如果你习惯使用Base R,也可以通过循环遍历所有提示和年龄组的组合来实现:

# 1. 先创建年龄分组(同第一步)
testdata$age_group <- cut(testdata$age, 
                          breaks = c(14, 30, 45, 60), 
                          labels = c("15-30", "31-45", "46-60"),
                          include.lowest = TRUE)

# 2. 生成所有提示和年龄组的组合
prompt_age_combinations <- expand.grid(
  prompt = unique(testdata$prompt),
  age_group = unique(testdata$age_group),
  stringsAsFactors = FALSE
)

# 3. 循环处理每个组合,计算频率并合并到原始数据
for (i in 1:nrow(prompt_age_combinations)) {
  current_prompt <- prompt_age_combinations$prompt[i]
  current_age_group <- prompt_age_combinations$age_group[i]
  
  # 筛选当前提示和年龄组的数据
  subset_data <- subset(testdata, prompt == current_prompt & age_group == current_age_group)
  # 计算词频并转换为数据框
  freq_df <- as.data.frame(table(subset_data$typedWord))
  # 重命名列:第一列为typedWord,第二列为目标列名
  names(freq_df) <- c("typedWord", paste0("freq", current_prompt, current_age_group))
  
  # 将频率列合并回原始数据,all.x=TRUE保留所有原始行
  testdata <- merge(testdata, freq_df, by = "typedWord", all.x = TRUE)
}

# 4. 将缺失值(未出现的词)替换为0
testdata[is.na(testdata)] <- 0

这样处理后,testdata中就会生成所有你需要的频率列,每个列对应一个提示+年龄组的组合。


内容的提问来源于stack exchange,提问作者Andrea Dioni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:56:14