在R中对data.frame列制表时忽略元素顺序的实现方法
解决方案
核心思路是对每行的语言条目先过滤缺失值、再排序,将不同顺序的同语言组合转化为统一格式,之后再进行统计。
以下是具体实现代码:
library(tidyverse) DATA <- read.table(header=T, text=" ID lang1 lang2 lang3 1 spanish english NA 2 english spanish french 3 russian english NA 4 french english spanish 5 english russian NA 6 english french NA") # 处理语言组合:过滤NA → 排序 → 拼接成统一字符串 combs <- DATA %>% rowwise() %>% mutate( # 提取当前行的语言列,过滤NA后排序 sorted_lang = list(sort(na.omit(c(lang1, lang2, lang3)))), # 将排序后的语言拼接成字符串 lang_comb = paste(sorted_lang, collapse = ", ") ) %>% ungroup() # 统计结果 with(combs, table(lang_comb))
运行后输出的统计结果会自动合并同语言不同顺序的组合:
english, spanish english, french english, russian english, french, spanish 1 1 2 2
关键步骤解释
rowwise():让后续操作按行执行,确保每行的语言单独处理na.omit(c(lang1, lang2, lang3)):去除当前行中的缺失值(NA)sort():对语言名称按字母顺序排序,保证同组语言的顺序统一paste(..., collapse = ", "):将排序后的语言拼接成一个字符串,作为统一的分类标识
内容的提问来源于stack exchange,提问作者Simon Harmel
相关产品推荐
相关产品推荐

