2013-03-15 76 views
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”。

我想把它变成一个由9列和1783行组成的表格,而不会产生重复的值。 (因此我尝试了使用do.call,但它没有奏效,最后我得到了一堆乱七八糟的东西)。较短的可以在空格中有NAs,或者是空白的。

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

必须有一种方法来做到这一点。谢谢!

我想我应该加入它最初是作为数据框出来时,我有四列的数据,但我只需要一列的数据,当我创建此列表的功能创建只有一列我实际上它似乎不再是一个数据框。

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文件并获得我以后的正确结果。所以我想我有我的答案。我的意思是现在它工作。

但是我仍然认为我错过了使这项工作达到最佳状态的东西,即使它现在给了我以后的正确结果。

+0

也许发布一个可重现的例子,显示数据集的一个子集,可能有10-20行。 – 2013-03-15 19:09:49

+0

该数据的重叠程度非常有限。您的初始描述表明高度重叠。谨慎澄清? – 2013-03-15 20:40:55

+0

这是我正在研究的事物清单,这些清单具有一定的价值,使其具有重要意义。这些子集全部来自4500个相同的较大集合,并且它们之间有一些重叠但不是很多。 do.call中的重复问题是,我将在最终列集中有50或60个副本。我可以手动将它们从电子表格中删除,但这会挫败学习编程的重点。 – 2013-03-15 21:31:17

回答

1

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

如果你想使他们所有的因素了一套共通的水平,然后使用此:

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

正如评论所说,我还是不明白你想象中产生什么样的表。需要一个具体的例子。

+0

这是我的想法,谢谢! – 2013-03-15 20:18:08

+0

我试图改变因子列转换为字符类,但我只能改变模式。我应该怎么做? – 2013-03-16 21:52:39

+0

你应该发布'dput(head(object))',这样就有一个可重复的例子。打印的输出不表明这些是因素,因为没有打印任何等级。将因子转换为字符的函数是'as.character'。 – 2013-03-16 21:56:37