【发布时间】:2018-09-08 22:29:10
【问题描述】:
希望有人可以帮助我。我在网上找到了类似的问题,但我所见过的例子都没有完全符合我的要求或在我的数据结构上工作。
我需要沿数据子集从数据帧中删除 NA,并将剩余的 NA 值压缩到每个数据子集的行中。
例子:
#create example data
a <- c(1, 1, 1, 2, 2, 2) #this is the subsetting variable in the example
b <- c(NA, NA, "B", NA, NA, "C") #max 1 non-NA value for each subset
c <- c("A", NA, NA, "A", NA, NA)
d <- c(NA, NA, 1, NA, NA, NA) #some subsets for some columns have all NA values
dat <- as.data.frame(cbind(a, b, c, d))
> desired output
a b c d
1 B A 1
2 C A <NA>
经验法则: 1)需要从每列中删除NA值 2) 沿数据子集循环(上例中的“a”列) 3) 对于每个子集,所有列最多有 1 个非 NA 值,但某些列可能具有所有 NA 值
想法:
- lapply 或 dplyr 可能有助于沿所有列循环
- na.omit 可能很有帮助,如果子集列包含所有条目 可以忽略行(类似于 as.data.frame(lapply(dat.admin, na.omit)))。如果某些子集不返回任何非 NA 值,则将 lapply 输出返回到数据框时出现问题
- x[which.min(is.na(x))] 如果费力地应用于每个单独的列,则可以有效地实现这一点
感谢任何帮助以将最终部分放在一起!谢谢!
【问题讨论】: