Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 恢复列表中的拆分效果_R - Fatal编程技术网

R 恢复列表中的拆分效果

R 恢复列表中的拆分效果,r,R,我有一个列表,我想把它转换成一个带有两列的data.frame。问题在于列表元素的长度不相等,下面是我的数据的外观示例: my.list $A1CF [1] "A1CF" "APOBEC1" "CUGBP2" "KHSRP" "SYNCRIP" "TNPO2" $A2LD1 [1] "A2LD1" "PRPSAP2" "RPL15" "TANC1" $A2M [1] "A2M" "ADAM19" "ADAMTS1" "AMBP" "AN

我有一个列表,我想把它转换成一个带有两列的data.frame。问题在于列表元素的长度不相等,下面是我的数据的外观示例:

my.list

$A1CF
 [1] "A1CF"    "APOBEC1" "CUGBP2"  "KHSRP"   "SYNCRIP" "TNPO2"  

$A2LD1
[1] "A2LD1"   "PRPSAP2" "RPL15"   "TANC1"  

$A2M
[1] "A2M"      "ADAM19"   "ADAMTS1"  "AMBP"     "ANXA6"    "APOE"
此列表来自上一个data.frame:

my.list <- split(df$V2, df$V1) 

df
      V1      V2
1   A1BG    A1BG
2   A1BG  CRISP3
3   A1CF    A1CF
4   A1CF APOBEC1
5   A1CF  CUGBP2
6   A1CF   KHSRP
7   A1CF SYNCRIP
8   A1CF   TNPO2
9  A2LD1   A2LD1
10 A2LD1 PRPSAP2
11 A2LD1   RPL15
12 A2LD1   TANC1
13   A2M     A2M
14   A2M  ADAM19
15   A2M ADAMTS1
16   A2M    AMBP
17   A2M   ANXA6
18   A2M    APOE

我尝试过:
df.new使用这些虚拟数据

ll <- list(a = letters[3:6],
           b = LETTERS[1:10],
           c = letters[1:2])

stack(ll)


如果您有一个向量列表,@baptiste将为您提供大致正确的格式,

,并为该列表提供更简明和一般的答案

您还可以应用
unsplit
,即
split
的反向操作

options(stringsAsFactors = FALSE)
df <- data.frame(V1 = c('A1BG', 'A1BG', 'A1CF', 'A1CF', 'A1CF', 'A1CF', 'A1CF', 'A1CF', 
                        'A2LD1', 'A2LD1', 'A2LD1', 'A2LD1', 'A2M', 'A2M', 'A2M', 'A2M', 
                        'A2M', 'A2M'),
                 V2 = c('A1BG', 'CRISP3', 'A1CF', 'APOBEC1', 'CUGBP2', 'KHSRP', 'SYNCRIP',
                        'TNPO2', 'A2LD1', 'PRPSAP2', 'RPL15', 'TANC1', 'A2M', 'ADAM19', 
                        'ADAMTS1', 'AMBP', 'ANXA6', 'APOE'))
my.list <- split(df$V2, df$V1)
newdat <- data.frame(V1=df$V1, V2=unsplit(my.list, df$V1))


newdf我喜欢@baptiste answer。我还想建议您将
plyr
包作为一种通用框架,一次完成此类拆分/应用/合并工作。+1还要注意,如果您在对
df$V1
进行子集设置时使用
drop=TRUE
,则无需指定
stringsAsFactors=FALSE
。亲爱的@baptiste,非常感谢您的回复,但是当我从列表中删除一些项目,然后使用ldply恢复拆分效果时,发生了一些“有趣”的事情。如果我还原分割的文件,然后我运行一些分析,删除的文件会再次出现……你会意识到,如果我不在你身后看着你的电脑屏幕,我无法回答这个问题。如果你有一个新问题,请发布一个完整的和最小的重复性的例子作为一个新问题。
reshape2::melt(ll, id=1)
plyr::ldply(ll, cbind)
options(stringsAsFactors = FALSE)
df <- data.frame(V1 = c('A1BG', 'A1BG', 'A1CF', 'A1CF', 'A1CF', 'A1CF', 'A1CF', 'A1CF', 
                        'A2LD1', 'A2LD1', 'A2LD1', 'A2LD1', 'A2M', 'A2M', 'A2M', 'A2M', 
                        'A2M', 'A2M'),
                 V2 = c('A1BG', 'CRISP3', 'A1CF', 'APOBEC1', 'CUGBP2', 'KHSRP', 'SYNCRIP',
                        'TNPO2', 'A2LD1', 'PRPSAP2', 'RPL15', 'TANC1', 'A2M', 'ADAM19', 
                        'ADAMTS1', 'AMBP', 'ANXA6', 'APOE'))
my.list <- split(df$V2, df$V1)
newdat <- data.frame(V1=df$V1, V2=unsplit(my.list, df$V1))
my.list <- split(df, df$V1)
newdf <- unsplit(my.list[!names(my.list) %in% 'A1BG'], df$V1[!df$V1 %in% 'A1BG']) 
newdf <- do.call(rbind, my.list[!names(my.list) %in% 'A1BG'])