使用字符串列和数字列定义空数据框,然后再添加值

时间:2014-08-10 21:57:41

标签: r string csv dataframe numbers

我最初尝试定义数据框,然后逐个使用rbind添加行。我的问题是,在result的以下定义中,我希望humanReplicate,ratReplicate为字符串格式,其他列为数字格式。

result <- data.frame(humanReplicate = "human_replicate",  ratReplicate = "rat_replicate",
     pvalue = "p-value", alternative = "alternative_hypothesis", Conf.int1 = "conf.int1", 
    Conf.int2 ="conf.int2", oddratio = "Odd_Ratio")

然后,我正在以下列方式添加新行(这是Fisher测试的结果):

newLine <- data.frame(t(c(humanReplicate = humanReplicateName,
 ratReplicate = ratReplicateName, pvalue = fisherTest$p, 
 alternative = fisherTest$alternative, Conf.int1 = fisherTest$conf.int[1],
 Conf.int2 =fisherTest$conf.int[2],  oddratio = fisherTest$estimate[[1]])))
result <-rbind(result,newLine)

此处fisherTest$X的所有值均为数字。 humanReplicateNameratReplicateName是字符串。但是,如果我以上述方式定义结果然后以这种方式定义newLine,那么数据框的所有列都将成为字符串。我理解当我在这里定义结果时,我正在将它们全部串起来。但是如果我想把它和字符串和数字混合在一起,我该如何定义呢?

我的最终目标是将result作为csv文件,我正在执行以下操作:

write.table(result, file = "newData4.csv", row.names = FALSE, append = FALSE, col.names = TRUE, sep = ",")

1 个答案:

答案 0 :(得分:1)

您的问题出在连接函数c()中。您不需要它和t函数一样。确实

tmp  <- data.frame(t(c("test" = 2,"human" = "Paul")))

显然与此行相同

    tmp2  <- data.frame("test" = 2,"human" = "Paul")

> tmp
  test human
1    2  Paul

> tmp2
  test human
1    2  Paul

> tmp$test
test 
   2 
Levels: 2
> tmp2$test
[1] 2

> is.numeric(tmp$test)
[1] FALSE
> is.numeric(tmp2$test)
[1] TRUE

首先使用c制作1个向量,将文本和数字混合解释为因子向量,而直接调用dataframe则填充两个不同且独立的列