Select 行的第一个非 NA 值
Select first non-NA value by row
我有这样的数据:
df <- data.frame(id=c(1, 2, 3, 4), A=c(6, NA, NA, 4), B=c(3, 2, NA, NA), C=c(4, 3, 5, NA), D=c(4, 3, 1, 2))
id A B C D
1 1 6 3 4 4
2 2 NA 2 3 3
3 3 NA NA 5 1
4 4 4 NA NA 2
对于每一行:如果该行在“A”列中有非 NA
值,我希望将该值输入到新列 'E' 中。如果没有,我想转到“B”列,然后将该值输入到 E 中。依此类推。因此,新列将是 E = c(6, 2, 5, 4)
.
我想使用 ifelse
功能,但我不太确定该怎么做。
整洁宇宙
library(dplyr)
mutate(df, E = coalesce(A, B, C, D))
# id A B C D E
# 1 1 6 3 4 4 6
# 2 2 NA 2 3 3 2
# 3 3 NA NA 5 1 5
# 4 4 4 NA NA 2 4
coalesce
实际上是 "return 每个向量中的第一个非 NA
"。它有一个 SQL 等价物(或者它相当于 SQL 的 COALESCE
,实际上)。
基础 R
df$E <- apply(df[,-1], 1, function(z) na.omit(z)[1])
df
# id A B C D E
# 1 1 6 3 4 4 6
# 2 2 NA 2 3 3 2
# 3 3 NA NA 5 1 5
# 4 4 4 NA NA 2 4
na.omit
删除所有 NA
值,并且 [1]
确保我们始终 return 只是第一个 他们。 [1]
优于(比方说)head(., 1)
的优势在于,如果没有非 NA
元素,head
将 return NULL
,而 .[1]
将始终 return 至少一个 NA
(向您表明这是唯一的选择)。
我有这样的数据:
df <- data.frame(id=c(1, 2, 3, 4), A=c(6, NA, NA, 4), B=c(3, 2, NA, NA), C=c(4, 3, 5, NA), D=c(4, 3, 1, 2))
id A B C D
1 1 6 3 4 4
2 2 NA 2 3 3
3 3 NA NA 5 1
4 4 4 NA NA 2
对于每一行:如果该行在“A”列中有非 NA
值,我希望将该值输入到新列 'E' 中。如果没有,我想转到“B”列,然后将该值输入到 E 中。依此类推。因此,新列将是 E = c(6, 2, 5, 4)
.
我想使用 ifelse
功能,但我不太确定该怎么做。
整洁宇宙
library(dplyr)
mutate(df, E = coalesce(A, B, C, D))
# id A B C D E
# 1 1 6 3 4 4 6
# 2 2 NA 2 3 3 2
# 3 3 NA NA 5 1 5
# 4 4 4 NA NA 2 4
coalesce
实际上是 "return 每个向量中的第一个非 NA
"。它有一个 SQL 等价物(或者它相当于 SQL 的 COALESCE
,实际上)。
基础 R
df$E <- apply(df[,-1], 1, function(z) na.omit(z)[1])
df
# id A B C D E
# 1 1 6 3 4 4 6
# 2 2 NA 2 3 3 2
# 3 3 NA NA 5 1 5
# 4 4 4 NA NA 2 4
na.omit
删除所有 NA
值,并且 [1]
确保我们始终 return 只是第一个 他们。 [1]
优于(比方说)head(., 1)
的优势在于,如果没有非 NA
元素,head
将 return NULL
,而 .[1]
将始终 return 至少一个 NA
(向您表明这是唯一的选择)。