将行转置为列并仅删除结果列中的NA

时间:2014-04-22 17:07:46

标签: r data.table

我正在尝试从这种类型的输入文件中编写代码

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

谢谢。

1 个答案:

答案 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