首页 > 解决方案 > 如何根据第三列的值置换 tibble 的两列?

问题描述

我有以下小标题:

library(dplyr)
df <- tibble(v1 = c(1,-1,1), min = c(2,3,4), max = c(4,5,6))

这给了我:

# A tibble: 3 x 3
     v1   min   max
  <dbl> <dbl> <dbl>
1     1     2     4
2    -1     3     5
3     1     4     6

如果值为is ,我想置换minwith的值。这就是第二行的情况(我想得到 min=5 和 max=3)。我想使用. 我知道我必须使用第三个临时变量,但我不能在.maxv1-1dplyrdplyr

标签: rdplyr

解决方案


一个更简单的选择base R是基于“v1”创建一个逻辑索引,然后通过翻转赋值rhslhs表达式中的列来赋值

i1 <- df$v1 == -1
df[i1, c("min", "max")]  <- df[i1, c("max", "min")]
df
# A tibble: 3 x 3
#     v1   min   max
#  <dbl> <dbl> <dbl>
#1     1     2     4
#2    -1     5     3
#3     1     4     6

使用的选项filter/bind_rows

df %>% 
   filter(v1 == -1) %>% 
   rename_all(~ c("v1", "max", "min")) %>% 
   bind_rows(df %>%
              filter(v1 != -1))

推荐阅读