通过两个条件创建新列
Create new column by two conditions
我想通过对 value3 或 diff= value1 -value2[=18 的非缺失值的 diff= value1 -value3 进行差分来创建新的差异列=] 如果只有 value3 是 NA.
data<-data.frame(id=c(1,2,3,4,5,6,7,8),
value1=c(10,12,11,15,16,14,14,11),
value2=c(9,5,6,10,8,10,6,8),
value3=c(4,8,7,NA,9,NA,5,NA))
期望的输出:
id value1 value2 value3 diff
1 10 9 4 6
2 12 5 8 4
3 11 6 7 4
4 15 10 NA 5
5 16 8 9 7
6 14 10 NA 4
7 14 6 5 9
8 11 8 NA 3
在 dplyr
中,您可以使用 coalesce
获取 value3
和 value2
之间的非 NA 值。
library(dplyr)
data %>% mutate(diff = value1 - coalesce(value3, value2))
# id value1 value2 value3 diff
#1 1 10 9 4 6
#2 2 12 5 8 4
#3 3 11 6 7 4
#4 4 15 10 NA 5
#5 5 16 8 9 7
#6 6 14 10 NA 4
#7 7 14 6 5 9
#8 8 11 8 NA 3
在基础 R 中 ifelse
-
transform(data, diff = value1 - ifelse(is.na(value3), value2, value3))
和data.table
有fcoalesce
。
library(data.table)
setDT(data)[, diff := value1 - fcoalesce(value3, value2)]
我们可以使用
library(dplyr)
data %>%
mutate(diff = value1 - case_when(is.na(value3) ~ value2, TRUE ~ value3))
id value1 value2 value3 diff
1 1 10 9 4 6
2 2 12 5 8 4
3 3 11 6 7 4
4 4 15 10 NA 5
5 5 16 8 9 7
6 6 14 10 NA 4
7 7 14 6 5 9
8 8 11 8 NA 3
我想通过对 value3 或 diff= value1 -value2[=18 的非缺失值的 diff= value1 -value3 进行差分来创建新的差异列=] 如果只有 value3 是 NA.
data<-data.frame(id=c(1,2,3,4,5,6,7,8),
value1=c(10,12,11,15,16,14,14,11),
value2=c(9,5,6,10,8,10,6,8),
value3=c(4,8,7,NA,9,NA,5,NA))
期望的输出:
id value1 value2 value3 diff
1 10 9 4 6
2 12 5 8 4
3 11 6 7 4
4 15 10 NA 5
5 16 8 9 7
6 14 10 NA 4
7 14 6 5 9
8 11 8 NA 3
在 dplyr
中,您可以使用 coalesce
获取 value3
和 value2
之间的非 NA 值。
library(dplyr)
data %>% mutate(diff = value1 - coalesce(value3, value2))
# id value1 value2 value3 diff
#1 1 10 9 4 6
#2 2 12 5 8 4
#3 3 11 6 7 4
#4 4 15 10 NA 5
#5 5 16 8 9 7
#6 6 14 10 NA 4
#7 7 14 6 5 9
#8 8 11 8 NA 3
在基础 R 中 ifelse
-
transform(data, diff = value1 - ifelse(is.na(value3), value2, value3))
和data.table
有fcoalesce
。
library(data.table)
setDT(data)[, diff := value1 - fcoalesce(value3, value2)]
我们可以使用
library(dplyr)
data %>%
mutate(diff = value1 - case_when(is.na(value3) ~ value2, TRUE ~ value3))
id value1 value2 value3 diff
1 1 10 9 4 6
2 2 12 5 8 4
3 3 11 6 7 4
4 4 15 10 NA 5
5 5 16 8 9 7
6 6 14 10 NA 4
7 7 14 6 5 9
8 8 11 8 NA 3