我最初尝试定义数据框,然后逐个使用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
的所有值均为数字。 humanReplicateName
和ratReplicateName
是字符串。但是,如果我以上述方式定义结果然后以这种方式定义newLine,那么数据框的所有列都将成为字符串。我理解当我在这里定义结果时,我正在将它们全部串起来。但是如果我想把它和字符串和数字混合在一起,我该如何定义呢?
我的最终目标是将result
作为csv
文件,我正在执行以下操作:
write.table(result, file = "newData4.csv", row.names = FALSE, append = FALSE, col.names = TRUE, sep = ",")
答案 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
则填充两个不同且独立的列