2012-03-06 522 views
0

我发现许多与列名称的矩阵堆栈相关的线程,但没有任何信息可以帮助解决这个问题。 我有这样矩阵堆积列名称在R

Lcover 
County  8   9 
    53009 868.935 1171.0050 
    53055  NA 414.9733 
    53057  NA 276.5450 
    53073 706.700  NA 

一个矩阵,我想创建这样一个数据帧

County Lcover Value 
53009 8  868.935 
53009 9 1171.0050 
53055 9  414.9733 
53057 9  276.5450 
53073 8  706.700 

会有人给我建议,我该怎么办呢?

在此先感谢。

戴文

+0

看看包'reshape2'中的'melt()'函数。 – Andrie 2012-03-06 15:49:46

+1

这看起来更像是如何打印R“表”。你用as.data.frame()得到了什么,因为有一个表方法? – 2012-03-06 16:20:05

回答

0

由于Andrie指出,melt()功能使这很轻松:

x <- read.table(text = "County  8   9 
    53009 868.935 1171.0050 
    53055  NA 414.9733 
    53057  NA 276.5450 
    53073 706.700  NA ", header = TRUE) 

require(reshape2) 
melt(x, id.vars = "County", na.rm=TRUE) 

    County variable  value 
1 53009  X8 868.9350 
4 53073  X8 706.7000 
5 53009  X9 1171.0050 
6 53055  X9 414.9733 
7 53057  X9 276.5450 

因为R期望做出有效的列名与make.names()功能的“X”出现在列前。阅读/创建表格时,您可以使用check.names = FALSE禁用该功能。或者将结果列中的X与gsub("X","", variable)放在一起。如果要保留熔化的数据帧中的NA值,请在melt()函数中更改na.rm = FALSE

+0

Andrie:谢谢。但是,即使安装了reshape2库之后,也找不到熔化()函数。另外,这里给出的输入是大文件的一部分。那么,可以使用read.delim()或read.table()来读取文件吗? – user1252544 2012-03-07 02:35:44

+0

@ user1252544 - 你是否用'library(reshape2)'命令加载了reshape2包?安装后,您仍然需要为会话加载它。对于'read.table()'或'read.delim()',使用'setwd()'导航到存储文件的目录。你可以用'getwd()'检查你的当前目录。一旦进入相应的目录(想想浏览Windows资源管理器选项卡),然后用'file'参数设置为您的文件名来调用您的read.xxx函数。你有没有仔细阅读R的介绍? http://cran.r-project.org/doc/manuals/R-intro.html。可以非常有帮助! – Chase 2012-03-07 03:10:49

+0

追逐:非常感谢,我之前使用过R,但是用于简单任务,如绘制图表。无论如何,你是非常有帮助的。我今天下午安装了reshape2,但忘了加载它,现在我做了。我还使用read.delim()函数来读取文件,并按照您的指示获取输出,我正在寻找。再次感谢。 Deven – user1252544 2012-03-07 04:42:32