【发布时间】:2014-06-07 04:54:51
【问题描述】:
我正在尝试编写代码以从这种类型的输入文件中获取
dput(input)
c("A\t8213", "B\tAnytown", "C\tAAA", "D\t19", "E\t19", "F\tAny ID",
"G\t0", "H\t0", "I\t0", "J\t0", "K\t0", "L\t0", "M\t0", "N\t0.048",
"O\t0.303", "P\t31", "Q\t0", "R\t-0.114", "S\t0.377", "T\t-5.833"
)
到这种类型的输出文件(一旦验证了一个文件的代码,那么它将用于处理数百个文件的函数):
dput(output)
c("A\tB\tC\tD\tE\tF\tG\tH\tI\tJ\tK\tL\tM\tN\tO\tP\tQ\tR\tS\tT",
"8213\tAnytown\tAAA\t19\t19\tAny
ID\t0\t0\t0\t0\t0\t0\t0\t0.048\t0.303\t31\t0\t-0.114\t0.377\t-5.833",
"")
我只想要每列中没有 NA 的行。
这是我迄今为止编写的代码(感谢 StackOverflow 上许多有用的代码 sn-ps 和 R 帮助邮件列表,用于以下修改后的代码)
library(data.table)
inputtmp <- data.table(read.table(textConnection(input), sep = "\t",
stringsAsFactors = FALSE))
inputtmp[, id:=1:length(inputtmp[[1]])]
inputtmp <- dcast.data.table(inputtmp, id~V1, value.var="V2")
varcols <- colnames(inputtmp)
问题:
1) 有没有更好的方法将行“转置”到列,以便不需要其他步骤来删除 NA?
2) 如果没有,那我怎样才能只从每列中删除 NA?
我尝试了以下 2 个链接中提供的不同版本的代码,但在我的情况下没有任何效果。
1) Fastest way to drop rows with missing values?
和
2) Apply over rows of data.table: find rows where a subset of columns are all NA
谢谢。
【问题讨论】:
-
NA在您的输入文件中会是什么样子?完全像"A\t"或其他东西的缺失值? -
据我所知,删除具有 NA 值的行的最快方法是
data[complete.cases(data), ] -
使用 Richard 给你的代码,你可以像
for(i in 1:length(data[1,])){data[complete.cases(data),i]}那样做一个 for 循环
标签: r data.table