我有以下数据结构...
> data <- data.frame(txt = paste0("f", 1:8),
a = c(NA, NA, NA, "A", "B", "A", NA, "C"),
b = c("D", "A", "C", NA, NA, NA, NA, NA),
c = c(NA, NA, NA, NA, NA, NA, "C", NA))
> data
# txt a b c
# 1 f1 <NA> D <NA>
# 2 f2 <NA> A <NA>
# 3 f3 <NA> C <NA>
# 4 f4 A <NA> <NA>
# 5 f5 B <NA> <NA>
# 6 f6 A <NA> <NA>
# 7 f7 <NA> <NA> C
# 8 f8 C <NA> <NA>
...,我想创建一个包含这些非NA列的值的新列(理论上,只有一个col)。
> data$tmp <- sapply(1:nrow(data), function(i) gsub("NA", "", paste(as.data.frame(data[i,-1]), collapse = "")))
> data
# txt a b c tmp
# 1 f1 <NA> D <NA> D
# 2 f2 <NA> A <NA> A
# 3 f3 <NA> C <NA> C
# 4 f4 A <NA> <NA> A
# 5 f5 B <NA> <NA> B
# 6 f6 A <NA> <NA> A
# 7 f7 <NA> <NA> C C
# 8 f8 C <NA> <NA> C
这段代码似乎可以按我的意愿工作,但是我有数百万行,而且速度太慢了……有什么可以帮助我找到更好的解决方案的吗?提前致谢。
这项工作会:
library(dplyr)
data %>% mutate(tmp = coalesce(a,b,c))
a b c tmp
1 <NA> D <NA> D
2 <NA> A <NA> A
3 <NA> C <NA> C
4 A <NA> <NA> A
5 B <NA> <NA> B
6 A <NA> <NA> A
7 <NA> <NA> C C
8 C <NA> <NA> C
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句