创建一个列,其中每个值都是 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("+")
           })