r-将行转换为列,并仅删除结果列中的NA

  • 本文关键字:删除 结果 NA 转换 data.table
  • 更新时间 :
  • 英文 :


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

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

最新更新