带有IF语句的R中的新变量

时间:2018-05-13 17:37:24

标签: r if-statement

说我有列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   

2 个答案:

答案 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")