R 如何使用多个其他列中的所有非NA值创建新列?
我想创建一个列d,其中包括来自其他列的所有非NA值 我尝试了ifelse,但不知道如何以正确的方式嵌套它,以便也包括c列中的值。。 也许应该使用ifelse以外的东西 这是一个虚拟数据帧:R 如何使用多个其他列中的所有非NA值创建新列?,r,if-statement,dataframe,conditional,na,R,If Statement,Dataframe,Conditional,Na,我想创建一个列d,其中包括来自其他列的所有非NA值 我尝试了ifelse,但不知道如何以正确的方式嵌套它,以便也包括c列中的值。。 也许应该使用ifelse以外的东西 这是一个虚拟数据帧: a <- c(NA, NA, NA, "A", "B", "A", NA, NA) b <- c("D", "A", "C", NA, NA, NA, NA, NA) c <- c(NA, NA, NA, NA, NA, NA, "C", NA) data <- data.fr
a <- c(NA, NA, NA, "A", "B", "A", NA, NA)
b <- c("D", "A", "C", NA, NA, NA, NA, NA)
c <- c(NA, NA, NA, NA, NA, NA, "C", NA)
data <- data.frame(a, b, c)
我希望d列如下所示:
data$d <- c("D", "A", "C", "A", "B", "A", "C", NA)
View(data)
假设每行只有一个非NA值,这是一个有点丑陋的想法
data$d <- apply(data, 1, function(i) ifelse(all(is.na(i)), NA, i[!is.na(i)]))
data
# a b c d
#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 <NA> <NA> <NA> <NA>
我也找到了这个解决方法,但我不确定我是否喜欢它:
data <- as.matrix(data)
data[is.na(data)] <- " "
data <- data.frame(data)
data$d <- with(data, paste0(a, b, c), na.rm=TRUE)
View(data)
我们可以使用pmax
数据
结果表明,这应该是在NA细胞中,而不是在NA细胞中 如果无法避免空间,请在数据帧的列上使用trimws,以在以后删除它们:
data$d <- trimws(data$d)
我当时正在研究一个类似的问题,并且认为我可以使用dplyr和stringr提供一个更通用的解决方案 图书馆管理员 a a b c d >一维 >2 A A >3C >4 A A >5b >六甲 >7 C C > 8
由v0.2.1数据[!is.nadata]于2019-05-06创建。这会更改值的顺序。是否需要保留包含所有NA的行?i、 e.数据框的最后一行是。d列中应包括所有带有NA的行。并且值的顺序应该是完整的。您也可以尝试data[cbind1:nrowdata,max.col!is.nadata]这实际上不是一个坏方法。你比我快了几秒钟。不过,您可以将其简化为两行:data[is.nadata]谢谢。事实证明,它将空单元格保存为一个空格,这使得d列中的因子级别与行中的因子级别一样多:-我目前无法测试它,但我认为您可以使用na.omit而不是整个匿名函数hmm。。。我原以为它会删除所有带有na的行,但现在也无法测试它。我的意思是应用na。使用apply逐行忽略。如果我没有弄错的话,如果您尝试仅从NAs中选择非NA值,而不是100%确定,那么您应该得到NA。好的……是的,这是有意义的……我将在早上测试它
data <- data.frame(a, b, c, stringsAsFactors=FALSE)
data$d <- trimws(data$d)