将逗号分隔的字符串读取为数字并创建数据帧

时间:2014-10-13 16:30:40

标签: r

我一直在尝试应用一种方法来设置值。我想要以下几点:

library(MADAM)

fisher.method(data.frame(0.0001879,2.2e-16))

##          S num.p p.value p.adj
## 1 89.26501     2       0     0

但是,要使用的值位于我一次读取一行的文件中。如果我按照Convert comma separated string to integer in R的建议使用strsplit,我会得到:

oneLine <- "0.0001879, 2.2e-16"

fisher.method(data.frame(as.numeric(unlist(strsplit(oneLine, ",")))))

##          S num.p      p.value        p.adj
## 1 17.15920     1 1.879000e-04 1.879000e-04
## 2 72.10581     1 2.220446e-16 4.440892e-16

我怎样才能达到预期效果?也就是说,从这些单独的值创建数据框?

1 个答案:

答案 0 :(得分:0)

 library(MADAM)
 lapply(strsplit(oneLine, ","),
              function(x) fisher.method(as.data.frame.list(as.numeric(x))))
  #[[1]]
  #         S num.p p.value p.adj
  #1 89.26501     2       0     0

如果您有vector

  Lines <- c("0.0001879, 2.2e-16", "0.001435, 1.2e-14", "0.00014353, 2.5e-13")
  do.call(rbind,lapply(strsplit(Lines, ","), 
        function(x) fisher.method(as.data.frame.list(as.numeric(x)))))
  #         S num.p      p.value        p.adj
 # 1 89.26501     2 0.000000e+00 0.000000e+00
 #11 77.20092     2 6.661338e-16 6.661338e-16
 #12 75.73256     2 1.443290e-15 1.443290e-15

如果您正在阅读文件,例如file1.csv的内容是

 0.0001879, 2.2e-16
 0.001435, 1.2e-14
 0.00014353, 2.5e-13

然后,您可以使用read.csv来阅读该文件,并将fisher.method直接应用于两列data.frame

 dat <- read.csv("file1.csv", header=FALSE)
 fisher.method(dat)
  #          S num.p      p.value        p.adj
  #1 89.26501     2 0.000000e+00 0.000000e+00
  #2 77.20092     2 6.661338e-16 9.992007e-16
  #3 75.73256     2 1.443290e-15 1.443290e-15