r - 取消列出列以在数据框中创建唯一行

标签 r dataframe

我面临以下 R 转换问题。 我有以下数据框:

 test_df <-  structure(list(word = c("list of XYZ schools", 
"list of basketball", "list of usa"), results = c("58", "151", "29"), key_list = structure(list(`coRq,coG,coQ,co7E,coV98` = c("coRq", "coG", "coQ", "co7E", "coV98"), `coV98,coUD,coHF,cobK,con7` = c("coV98","coUD", "coHF", "cobK", "con7"), `coV98,coX7,couC,coD3,copW` = c("coV98", "coX7", "couC", "coD3", "copW")), .Names = c("coRq,coG,coQ,co7E,coV98", "coV98,coUD,coHF,cobK,con7", "coV98,coX7,couC,coD3,copW"))), .Names = c("word", "results", "key_list"), row.names = c(116L, 150L, 277L), class = "data.frame")

简而言之,共有三列,“word”上唯一,然后是相应的“key_list”,其中包含以逗号分隔的键列表。我有兴趣创建一个新的数据框架,其中每个键都是唯一的,单词信息以及结果信息都是重复的。 因此数据框如下所示:

key          word                    results                    
coV98       "list of XYZ schools"    58
coRq        "list of XYZ schools"    58
coV98       "list of basketball"     151
coV98       "list of usa"            29

对于所有键,依此类推,所以我想展开键,将它们取消列出,然后重新整形为具有重复单词和其他列的数据框。

我尝试过以下几种方法: 创建了一个唯一的键列表,然后尝试 grep 列中的每个键并循环创建一个新的较小的数据帧,然后将它们绑定(bind)在一起,但生成的数据帧不包含键列:

keys <- as.data.frame(table(unname(unlist(test_df$key_list))))
ttt <- lapply(keys, function(xx){
      idx <- grep(xx, test_df$key_list)
      df <- all_data_sub[idx,]})
      final_df <- do.call(rbind, ttt)

我也尝试过取消列出和 reshape ,但我没有得到正确的组合。 任何建议都会很棒! 谢谢

最佳答案

也许我们可以使用 splitstackshape 中的 listCol_l

library(splitstackshape)
listCol_l(test_df, 'key_list')[]

关于r - 取消列出列以在数据框中创建唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34907652/

相关文章:

python - 使用 pandas apply with dates and dates shifted

r - 如何从数据库中过滤日期数字、不完整日期和 NA 并转换为 r 中的统一日期类

r - 改进 RSelenium 循环,减少导航到页面的时间

r - 比较纵向数据集中连续行中的值

html - 如何在 Shiny 中方便地添加多个换行符?

删除 R 中符号(连字符)后面的空格

python - 如何将 Python Pandas DataFrame 写入具有特定列类型格式的 .XLS 文件?

python - Python 中的 Hive 子字符串等效项

r - 将数据文件和标签文件组合在一起,在 R 中拥有一个单一的标签数据框

python - 无法在 Pandas 中创建折线图