我正在尝试从这种类型的输入文件中编写代码
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和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?
我尝试过以下两个链接中提供的不同修订代码,但在我的案例中没有任何效果。
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
谢谢。
答案 0 :(得分:1)
这会对你有用吗?
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")
inputtmp <- read.table(textConnection(input), sep = "\t", stringsAsFactors = FALSE)
rownames(inputtmp) <- as.character(inputtmp[, 1])
inputtmp <- as.data.frame(t(inputtmp))
library(data.table)
inputtmp <- data.table(inputtmp[-1, ])
inputtmp
# A B C D E F G H I J K L M N O P Q R S T
# 1: 8213 Anytown AAA 19 19 Any ID 0 0 0 0 0 0 0 0.048 0.303 31 0 -0.114 0.377 -5.833