创建一个列,其中每个值都是 R 中 if 语句的结果
create a column where each value is the result of an if statement in R
你好,我有一个数据框,其中第 2 列和第 3 列有整数
head(mtcars)[,c(5,6)]
|drat |wt|
| ---|---|
|3.90|2.620|
|3.90|2.875|
|3.85|2.320|
|3.08|3.215|
|3.15|3.440|
|2.76|3.460|
问题是我想以行方式添加第三列,如果 col2 数字大于 col3 数字,则同一行上的值将为“-”。如果相反(col2 大于 col3),则新列上的行值将为“+”。
这是我试过的:
mtcars %>%
rowwise() %>%
mutate(strand =
if (drat < wt ){
print("-"); else
print("+")
})
但我收到错误消息:
Error: unexpected '}' in " }"
预期输出:
|drat|wt|strand|
|----|--|------|
|3.90|2.620|"-"|
|3.90|2.875|"-"|
|3.85|2.320|"-"|
|3.08|3.215|"+"|
|3.15|3.440|"+"|
|2.76|3.460|"+"|
使用 ifelse 可能是最简单的:
mtcars$strand <- ifelse(test = mtcars$drat < mtcars$wt,
yes = "+",
no = "-")
mpg cyl disp hp drat wt qsec vs am gear carb strand
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 -
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 -
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 -
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 +
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 +
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 +
我觉得这个适合你:
mtcars %>%
mutate(strand = ifelse (drat < wt, '-', '+'))
您不需要 {}
和 ;
:
head(mtcars)[,c(5,6)] %>%
rowwise() %>%
mutate(strand = if (drat < wt )print("-") else print("+"))
drat wt strand
<dbl> <dbl> <chr>
1 3.9 2.62 +
2 3.9 2.88 +
3 3.85 2.32 +
4 3.08 3.22 -
5 3.15 3.44 -
6 2.76 3.46 -
替换分号“;”和 ”}”。
否则打开一个新的“{”
这是你的代码,它运行良好:
mtcars %>%
rowwise() %>%
mutate(strand =
if (drat < wt ){
print("-")} else{
print("+")
})
你好,我有一个数据框,其中第 2 列和第 3 列有整数
head(mtcars)[,c(5,6)]
|drat |wt|
| ---|---|
|3.90|2.620|
|3.90|2.875|
|3.85|2.320|
|3.08|3.215|
|3.15|3.440|
|2.76|3.460|
问题是我想以行方式添加第三列,如果 col2 数字大于 col3 数字,则同一行上的值将为“-”。如果相反(col2 大于 col3),则新列上的行值将为“+”。
这是我试过的:
mtcars %>%
rowwise() %>%
mutate(strand =
if (drat < wt ){
print("-"); else
print("+")
})
但我收到错误消息:
Error: unexpected '}' in " }"
预期输出:
|drat|wt|strand|
|----|--|------|
|3.90|2.620|"-"|
|3.90|2.875|"-"|
|3.85|2.320|"-"|
|3.08|3.215|"+"|
|3.15|3.440|"+"|
|2.76|3.460|"+"|
使用 ifelse 可能是最简单的:
mtcars$strand <- ifelse(test = mtcars$drat < mtcars$wt,
yes = "+",
no = "-")
mpg cyl disp hp drat wt qsec vs am gear carb strand
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 -
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 -
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 -
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 +
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 +
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 +
我觉得这个适合你:
mtcars %>%
mutate(strand = ifelse (drat < wt, '-', '+'))
您不需要 {}
和 ;
:
head(mtcars)[,c(5,6)] %>%
rowwise() %>%
mutate(strand = if (drat < wt )print("-") else print("+"))
drat wt strand
<dbl> <dbl> <chr>
1 3.9 2.62 +
2 3.9 2.88 +
3 3.85 2.32 +
4 3.08 3.22 -
5 3.15 3.44 -
6 2.76 3.46 -
替换分号“;”和 ”}”。 否则打开一个新的“{” 这是你的代码,它运行良好:
mtcars %>%
rowwise() %>%
mutate(strand =
if (drat < wt ){
print("-")} else{
print("+")
})