说我有列X1和X2以及X3。基本上:我想创建一个新的变量Z,它等于X1-X3的第一个可用值。如果所有X1-X3都缺少值,我想将Z设置为NA。非常感谢!
X1 X2 X3 Z
1 2 3 1
NA 5 6 5
NA NA 9 9
NA NA 3 3
NA NA NA
答案 0 :(得分:3)
我发现root@localhost:/home/robin/www/trader# python3 manage.py findstatic templates/trader/style.css
No matching file found for 'templates/trader/style.css'.
root@localhost:/home/robin/www/trader# ls -l templates/trader/style.css
-rw-r----- 1 www-data www-data 155 May 13 12:46 templates/trader/style.css
对于处理这种情况非常有用和方便。由于OP有兴趣考虑所有列替换dplyr::coalesce
,因此NA
将提供更简单的选项。
一旦可以尝试:
dplyr::coalesce(!!!df1)
数据:强>
library(dplyr)
df1 <- df1 %>% mutate(Z = coalesce(X1, X2,X3))
#OR Even simpler option could be as
df1$Z <- dplyr::coalesce(!!!df1)
df1
# X1 X2 X3 Z
# 1 1 2 3 1
# 2 NA 5 6 5
# 3 NA NA 9 9
# 4 NA NA 3 3
# 5 NA NA NA NA
答案 1 :(得分:2)
我们可以使用max.col
获取每行的第一个非NA元素的列索引,cbind
和行索引(seq_len(nrow(df1))
)并提取元素
j1 <- max.col(!is.na(df1), "first")
df1$z <- df1[cbind(seq_len(nrow(df1)), j1)]
df1
# X1 X2 X3 z
#1 1 2 3 1
#2 NA 5 6 5
#3 NA NA 9 9
#4 NA NA 3 3
#5 NA NA NA NA
df1 <- structure(list(X1 = c(1L, NA, NA, NA, NA), X2 = c(2L, 5L, NA,
NA, NA), X3 = c(3L, 6L, 9L, 3L, NA)), row.names = c(NA, -5L),
class = "data.frame")