如何连接(合并)数据框中的列,替换 NA 值
How to join (merge) columns in a data frame, replacing NA values
我有这个数据框,有 4 列,我需要将列 B、C 和 D 合并到一个新列中
谢谢
A B C D
1.40 Fria Moderada NA NA
-1.17 Fria Debil NA NA
-0.85 NA NA Neutro
-0.74 NA NA Neutro
0.58 NA Calida Debil NA
1.29 NA Calida Moderada NA
包 tidyr 具有函数 unite,它可以解决问题:
#Sample Data
#dput(d)
d<-structure(list(A = c(1.4, -1.17, -0.85, -0.74, 0.58, 1.29), B = c("Fria Moderada",
"Fria Debil", NA, NA, NA, NA), C = c(NA, NA, NA, NA, "Calida Debil",
"Calida Moderada"), D = c(NA, NA, "Neutro", "Neutro", NA, NA)), .Names = c("A",
"B", "C", "D"), class = "data.frame", row.names = c(NA, -6L))
library(tidyr)
d[is.na(d)]<-"" #removes the NAs
unite(d, newcol, c(B, C, D), sep="")
如果对于 "B" 到 "D" 列,每行始终只有一个非 NA 值,我们可以使用 base R
中的 pmax
]
cbind(d[1], newcol=do.call(pmax, c(d[-1], list(na.rm=TRUE))))
# A newcol
#1 1.40 Fria Moderada
#2 -1.17 Fria Debil
#3 -0.85 Neutro
#4 -0.74 Neutro
#5 0.58 Calida Debil
#6 1.29 Calida Moderada
简单,但有效,还是我错了?
d[is.na(d)]<-"" #removes the NAs (code used by Dave2e)
d$newcol <- paste(d$B,d$C,d$D, sep = "")
我有这个数据框,有 4 列,我需要将列 B、C 和 D 合并到一个新列中
谢谢
A B C D
1.40 Fria Moderada NA NA
-1.17 Fria Debil NA NA
-0.85 NA NA Neutro
-0.74 NA NA Neutro
0.58 NA Calida Debil NA
1.29 NA Calida Moderada NA
包 tidyr 具有函数 unite,它可以解决问题:
#Sample Data
#dput(d)
d<-structure(list(A = c(1.4, -1.17, -0.85, -0.74, 0.58, 1.29), B = c("Fria Moderada",
"Fria Debil", NA, NA, NA, NA), C = c(NA, NA, NA, NA, "Calida Debil",
"Calida Moderada"), D = c(NA, NA, "Neutro", "Neutro", NA, NA)), .Names = c("A",
"B", "C", "D"), class = "data.frame", row.names = c(NA, -6L))
library(tidyr)
d[is.na(d)]<-"" #removes the NAs
unite(d, newcol, c(B, C, D), sep="")
如果对于 "B" 到 "D" 列,每行始终只有一个非 NA 值,我们可以使用 base R
pmax
]
cbind(d[1], newcol=do.call(pmax, c(d[-1], list(na.rm=TRUE))))
# A newcol
#1 1.40 Fria Moderada
#2 -1.17 Fria Debil
#3 -0.85 Neutro
#4 -0.74 Neutro
#5 0.58 Calida Debil
#6 1.29 Calida Moderada
简单,但有效,还是我错了?
d[is.na(d)]<-"" #removes the NAs (code used by Dave2e)
d$newcol <- paste(d$B,d$C,d$D, sep = "")