根据 R 中的条件创建一个新变量
Create a new variable based in conditions in R
我正在尝试在数据库中创建(改变)一个新变量,但我遇到了一些问题。我的想法是创建一个变量,该变量根据先前变量的值复制数据库中另一个变量的结果。
举个例子:
Database
var1var2var3 var4
1 45 AH67 A456
1 78 GH98 D788
5 46 GD94 M747
5 98 GF21 G589
10 47 GD09 I989
10 54 KG32 U456
15 48 FS89 C191
15 66 GF23 Y198
我的想法是:
- 如果 var1=1,new=var2
- 如果 var1=5,new=var3
- 如果 var1=10,new=NA。
- 如果 var1=15,new=var4
预期结果:
var1var2var3 var4 new
1 45 AH67 A456 45
1 78 GH98 D788 78
5 46 GD94 M747 GD94
5 98 GF21 G589 GD94
10 47 GD09 I989 na
10 54 KG32 U456 na
15 48 FS89 C191 C191
15 66 GF23 Y198 Y198
我试过了,但没成功。
data<-mutate(data,
ifelse(var1==1){New=var2},
ifelse(var1==5){New=var3},
ifelse(var1==10){New=NA},
ifelse(var1==15){New=var4})
提前致谢,
mutate
的语法是 mutate(.data, new_col = something)
。此外,由于您有多个基于 var1
的条件,因此您需要有一个嵌套的 ifelse
。因此,正确的做法是:
library(dplyr)
df %>% mutate(new = ifelse(var1 == 1,
var2,
ifelse(var1 == 5,
var3,
ifelse(var1 == 10,
NA,
ifelse(var1 == 15,
var4,
NA)))))
或者使用dplyr::case_when
,语法更清晰:
df %>% mutate(new = case_when(var1 == 1 ~ as.character(var2),
var1 == 5 ~ var3,
var1 == 15 ~ var4))
输出
以上两种方法的输出是一样的
var1 var2 var3 var4 new
1 1 45 AH67 A456 45
2 1 78 GH98 D788 78
3 5 46 GD94 M747 GD94
4 5 98 GF21 G589 GF21
5 10 47 GD09 I989 <NA>
6 10 54 KG32 U456 <NA>
7 15 48 FS89 C191 C191
8 15 66 GF23 Y198 Y198
library(dplyr)
data %>%
mutate(new = case_when(var1 == 1 ~ as.character(var2),
var1 == 5 ~ var3,
var1 == 10 ~ as.character(NA),
var1 == 15 ~ var4))
输出
# A tibble: 8 x 5
var1 var2 var3 var4 new
<int> <int> <chr> <chr> <chr>
1 1 45 AH67 A456 45
2 1 78 GH98 D788 78
3 5 46 GD94 M747 GD94
4 5 98 GF21 G589 GF21
5 10 47 GD09 I989 NA
6 10 54 KG32 U456 NA
7 15 48 FS89 C191 C191
8 15 66 GF23 Y198 Y198
我正在尝试在数据库中创建(改变)一个新变量,但我遇到了一些问题。我的想法是创建一个变量,该变量根据先前变量的值复制数据库中另一个变量的结果。
举个例子:
Database
var1var2var3 var4
1 45 AH67 A456
1 78 GH98 D788
5 46 GD94 M747
5 98 GF21 G589
10 47 GD09 I989
10 54 KG32 U456
15 48 FS89 C191
15 66 GF23 Y198
我的想法是:
- 如果 var1=1,new=var2
- 如果 var1=5,new=var3
- 如果 var1=10,new=NA。
- 如果 var1=15,new=var4
预期结果:
var1var2var3 var4 new
1 45 AH67 A456 45
1 78 GH98 D788 78
5 46 GD94 M747 GD94
5 98 GF21 G589 GD94
10 47 GD09 I989 na
10 54 KG32 U456 na
15 48 FS89 C191 C191
15 66 GF23 Y198 Y198
我试过了,但没成功。
data<-mutate(data,
ifelse(var1==1){New=var2},
ifelse(var1==5){New=var3},
ifelse(var1==10){New=NA},
ifelse(var1==15){New=var4})
提前致谢,
mutate
的语法是 mutate(.data, new_col = something)
。此外,由于您有多个基于 var1
的条件,因此您需要有一个嵌套的 ifelse
。因此,正确的做法是:
library(dplyr)
df %>% mutate(new = ifelse(var1 == 1,
var2,
ifelse(var1 == 5,
var3,
ifelse(var1 == 10,
NA,
ifelse(var1 == 15,
var4,
NA)))))
或者使用dplyr::case_when
,语法更清晰:
df %>% mutate(new = case_when(var1 == 1 ~ as.character(var2),
var1 == 5 ~ var3,
var1 == 15 ~ var4))
输出
以上两种方法的输出是一样的
var1 var2 var3 var4 new
1 1 45 AH67 A456 45
2 1 78 GH98 D788 78
3 5 46 GD94 M747 GD94
4 5 98 GF21 G589 GF21
5 10 47 GD09 I989 <NA>
6 10 54 KG32 U456 <NA>
7 15 48 FS89 C191 C191
8 15 66 GF23 Y198 Y198
library(dplyr)
data %>%
mutate(new = case_when(var1 == 1 ~ as.character(var2),
var1 == 5 ~ var3,
var1 == 10 ~ as.character(NA),
var1 == 15 ~ var4))
输出
# A tibble: 8 x 5
var1 var2 var3 var4 new
<int> <int> <chr> <chr> <chr>
1 1 45 AH67 A456 45
2 1 78 GH98 D788 78
3 5 46 GD94 M747 GD94
4 5 98 GF21 G589 GF21
5 10 47 GD09 I989 NA
6 10 54 KG32 U456 NA
7 15 48 FS89 C191 C191
8 15 66 GF23 Y198 Y198