正确地将“翻转”表读入data.frame

时间:2011-08-12 11:22:02

标签: r dataframe

我有一个制表符分隔的文件,如下所示:

AG-AG   AG-CA   AT-AA   AT-AC   AT-AG   ...
0.0142180094786 0.009478672985781   0.0142180094786 0.4218009478672 ...

当我使用read.table将其读入R时,我得到:

nc.tab <- read.table("./percent_splice_pair.tab", sep="\t", header=TRUE)
     AG.AG       AG.CA      AT.AA     AT.AC      AT.AG   ... 
1 0.01421801 0.009478673 0.01421801 0.4218009 0.03317536 ...

对我来说这感觉有些尴尬,因为如果它像这样,我更习惯于处理数据:

splice.pair    counts
AG.AG          0.01421801
AG.CA          0.009478673
AT.AA          0.01421801
AT.AG          0.03317536
...            ...

到目前为止,我尝试将表格强制转换为这样的数据框(使用data.frame())会导致非常奇怪的结果。我无法弄清楚如何获取表格的每一行作为一个简单的列表,然后我可以将其用作数据框的列。 colnames(nc.tab)适用于标题,但nc.tab[1,]之类的内容只会再次为我提供表格+标题。我错过了一些明显的东西吗?

- 编辑 -

虽然@Andrie的答案给了我所需的数据框架,但我必须做一些额外的工作来将计数值强制成数值,这样它们才能在ggplot中正常工作:

nc.tab <- read.table("./percent_splice_pair.tab", header=FALSE, sep="\t")
nc.mat <- t(as.matrix(nc.tab))
sp <- as.character(nc.tab[,2])
c <- as.numeric(as.character(nc.tab[,2]))
nc.dat <- data.frame(Splice.Pair=sp, count=c)

   Splice.Pair       count
1        AG-AG 0.014218009
2        AG-CA 0.009478673
3        AT-AA 0.014218009
4        AT-AC 0.421800948
5        AT-AG 0.033175355

1 个答案:

答案 0 :(得分:10)

您需要以下内容以您希望的方式阅读和重塑数据:

  • read.table与参数header=FALSE
  • 一起使用
  • 然后使用函数t()
  • 转置数据
  • 重命名列

以下是代码:

x <- read.table(..., header=FALSE)
df <- as.data.frame(t(x))
names(df) <- c("splice.pair", "counts")
df

   splice.pair            counts
V1       AG-AG   0.0142180094786
V2       AG-CA 0.009478672985781
V3       AT-AA   0.0142180094786
V4       AT-AC   0.4218009478672