0

我是 R 的相对新手。我已经搜索了最后两个工作日试图解决这个问题,但失败了。我有一个函数生成的因素列表。我在不同长度的列表中有 9 个项目。

>summary(list_dataframes)
      Length Class  Mode   
 [1,] 1757   factor numeric
 [2,] 1776   factor numeric
 [3,] 1737   factor numeric
 [4,] 1766   factor numeric
 [5,] 1783   factor numeric
 [6,] 1751   factor numeric
 [7,] 1744   factor numeric
 [8,] 1749   factor numeric
 [9,] 1757   factor numeric

部分数据样本如下:

list_dataframes

[[1]]

[1] 1776234_at   1779003_at   1776344_at   1777664_at   1772541_at   1774525_at  

 [[2]]

 [1] 1771703_at   1776299_at   1772744_at   1780116_at   1775451_at   1778821_at  

[7] 1774342_at 

 [[3]]

[1] 1780116_at   1776262_at   1775451_at   1780200_at   1775704_at 

我不确定为什么它说模式是“数字”。各个条目是数字和字母的混合,例如“S35_at”。

我想把它变成一个九列和 1783 行的表,而不产生重复的值。(因此我尝试使用 do.call 但它没有用。我最终得到了一堆重复的东西。)较短的那些可以在空白处有 NA 或为空白。

我需要能够最终得到可以放入电子表格的东西。

必须有办法做到这一点。谢谢!

我想我应该添加它最初是当我有四列数据时作为数据框出现但我只需要一列数据并且当我对创建此列表的函数进行子集化以仅创建我实际需要的一列时不再是数据框。

dput(head(list_dataframes))
list(structure(c(3605L, 5065L, 3663L, 4349L, 1655L, 2700L, 5692L, plus many more
.Label = c("1769308_at", 
"1769311_at", "1769312_at", "1769313_at", "1769314_at", "1769317_at", plus many more
this pattern is repeated nine more times

我想要做的是生成一个看起来像这样的表:

a= xyz,tuv,efg,hij,def
b= xyz,tuv,efg
c= tuv,efg,hij,def

我想做的是一张桌子

a    b    c
xyz  xyz  tuv
tuv  tuv  efg
efg  efg  hij
hij  NA   NA
NA   NA   NA

NA could be blank as well.

在阅读了关于列表的手册部分之后,我确定我已经生成了一个隐藏的列表列表。它有九个项目,其中包含我想要将数据隐藏两层的数据,即我必须使用 [[1]] 才能看到它。也因为 R 中的某些东西导致单列数据框成为一个因素,而不是保留一个数据框,它变得更加复杂。为了修复它(有点),我在方程式中添加了一个步骤,以便将该因素更改为数据框。

之后,当我使用 lapply 生成结果时,至少因素问题得到了解决。然后,我可以使用以下步骤将数据框拉出。

first <- list_dataframes[[1]]
second <- list_dataframes[[2]]
third <- list_dataframes[[3]]
fourth <- list_dataframes[[4]]
fifth <- list_dataframes[[5]]
sixth <- list_dataframes[[6]]
seventh <- list_dataframes[[7]]
eighth <- list_dataframes[[8]]
nineth <- list_dataframes[[9]]

all_results <- cbindX(first,second,third,fourth,fifth,sixth,seventh, eighth,nineth)

然后我可以使用 write.csv 编写 csv 文件并获得我想要的正确结果。所以我想我有我的答案。我的意思是它现在确实有效。

但是,我仍然认为我在使这项工作达到最佳状态时遗漏了一些东西,即使它现在给了我想要的正确结果。

4

1 回答 1

1

因子类变量是具有附加属性的整数模式向量,该属性是指定用于显示整数值的标签的字符向量。我认为将这些绑定在一起的最安全方法是将因子列转换为字符类,然后转换为mergewith all=TRUE。为什么不发布一个包含三个数据框或因素的简单示例...我实际上无法从摘要输出中确定结构...长度为 10、9 和 8 的数据具有任何复杂程度?

如果你想让它们都具有一组共同的水平,那么使用这个:

 shared_levels <- unique( c( unlist( lapply(list_dataframes) ) ) )
 length(shared_levels)
 new_list <- lapply(list_dataframes, factor, levels=shared_levels)

正如评论中所述,我仍然不明白你想象的是什么样的桌子。需要一个具体的例子。

于 2013-03-15T19:29:45.367 回答