【问题标题】:Transpose rows to columns and remove only NAs in resulting columns将行转置为列并仅删除结果列中的 NA
【发布时间】: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


【解决方案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

【讨论】:

  • 感谢您的快速回复。效果很好!
猜你喜欢
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
相关资源
最近更新 更多