2016-01-20 69 views
4

我面临以下R转换问题。 我有以下数据框:Unlist列在数据框中创建唯一行

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") 

简而言之有三列,对具有逗号分隔的密钥列表“字”,然后相应的“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) 

我也有unlisting和重塑发挥各地,但我没有得到正确的组合。 任何建议将是伟大的! 感谢

回答

4

可能是我们可以使用listCol_lsplitstackshape

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

这正是我需要的,我不知道怎么感谢你才好。我完全不知道那个图书馆,但读了它,似乎有很多有用的操作。谢谢!! – RCN

3

如果一个基础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) 
    })) 
相关问题