我正在尝试从这种类型的输入文件编写代码
dput(input)
c("At8213", "BtAnytown", "CtAAA", "Dt19", "Et19", "FtAny ID",
"Gt0", "Ht0", "It0", "Jt0", "Kt0", "Lt0", "Mt0", "Nt0.048",
"Ot0.303", "Pt31", "Qt0", "Rt-0.114", "St0.377", "Tt-5.833"
)
到这种类型的输出文件(一旦验证了一个文件的代码,它将被用于处理数百个文件的函数):
dput(output)
c("AtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStT",
"8213tAnytowntAAAt19t19tAny
IDt0t0t0t0t0t0t0t0.048t0.303t31t0t-0.114t0.377t-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?
我尝试了以下2个链接中提供的代码的不同修订,但在我的情况下没有任何效果。
1) 删除缺少值的行的最快方法?
和
2) 应用于数据行。表:查找列的子集都是NA的行
谢谢。
这对你有用吗?
input <- c("At8213", "BtAnytown", "CtAAA", "Dt19", "Et19", "FtAny ID",
"Gt0", "Ht0", "It0", "Jt0", "Kt0", "Lt0", "Mt0", "Nt0.048",
"Ot0.303", "Pt31", "Qt0", "Rt-0.114", "St0.377", "Tt-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