繁体   English   中英

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

[英]Unlist column to create unique row in 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 并循环创建一个新的较小的数据框,然后将它们绑定在一起,但是生成的数据框不包含关键栏:

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)

我也玩过取消上市和重塑,但我没有得到正确的组合。 任何建议都会很棒! 谢谢

也许我们可以使用listCol_lsplitstackshape

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

如果基本 R 解决方案对某人有帮助:

do.call(rbind, lapply(seq_along(test_df$key_list), function(i) {
    merge(test_df$key_list[[i]], test_df[i,-3], by=NULL)
  }))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM