【发布时间】:2021-11-26 09:52:23
【问题描述】:
考虑文章末尾的数据框 df。 我只是想在 x>y 时交换列 x 和 y 的元素。
数据框中可能还有我不想触摸的其他列。
从某种意义上说,我想按行对列 x 和 y 进行排序。
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
df<-tibble(x=1:10, y=10:1, extra=LETTERS[1:10])
df
#> # A tibble: 10 × 3
#> # Rowwise:
#> x y extra
#> <int> <int> <chr>
#> 1 1 10 A
#> 2 2 9 B
#> 3 3 8 C
#> 4 4 7 D
#> 5 5 6 E
#> 6 6 5 F
#> 7 7 4 G
#> 8 8 3 H
#> 9 9 2 I
#> 10 10 1 J
由reprex package 创建于 2021-10-06 (v2.0.1)
【问题讨论】:
-
我可能完全错了,但如果目标是“在 x>y 时交换列 x 和 y 的元素”,那么这似乎可以解决问题:
df %>% mutate(x1 = ifelse(x > y, y, x)) -
当然。总是可以按照这些思路做一些事情,然后对另一个 y2 变量进行相同的操作,然后丢弃 x 和 y,然后重命名 x2--->x 和 y2--->y,但是有更优雅的方法吗?
-
为什么需要
rename?使用@ChrisRuehlemann 方法:df %>% mutate(x = ifelse(x > y, y, x))? -
因为我还需要改变y的值。
-
@larry77 我明白了,请参阅下面可能有效的解决方案