提供了具有定义的组的表,其中每个组内
我只有1个引用(查询),我想更改列的所有值
基于参考值。
该值仅为1或-1。
想法是:
-如果引用等于1,则保持所有值不变
-但是,如果引用为-1,则所有值都应乘以-1,这样,引用将变为1,值为1的项将变为-1
-此外,修改后的组应具有相反的顺序
我正在尝试这样做:
library(tidyverse)
item <- c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l")
grou <- c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4)
quer <- c(0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0)
dir <- c(1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1)
ds <- tibble(item = item,
group = grou,
query = quer,
direction = dir)
ds %>%
group_by(group) %>%
mutate(
direction = ifelse(
direction[query == 1] == 1, direction, (-1 * direction)
)
)
所以这个
# A tibble: 12 x 5
# Groups: group [4]
item group query direction
<chr> <dbl> <dbl> <dbl>
1 a 1 0 1
2 b 1 1 1
3 c 1 0 1
4 d 2 0 -1
5 e 2 1 1
6 f 2 0 1
7 g 3 0 1
8 h 3 1 -1
9 i 3 0 1
10 j 4 0 -1
11 k 4 1 -1
12 l 4 0 -1
应该成为这个
# A tibble: 12 x 5
# Groups: group [4]
item group query direction
<chr> <dbl> <dbl> <dbl>
1 a 1 0 1
2 b 1 1 1
3 c 1 0 1
4 d 2 0 -1
5 e 2 1 1
6 f 2 0 1
7 i 3 0 -1
8 h 3 1 1
9 g 3 0 -1
10 l 4 0 1
11 k 4 1 1
12 j 4 0 1
但是它不起作用。
预先感谢
答案 0 :(得分:2)
这是一种实现方法:
onError
结果:
ds %>%
rowid_to_column("id") %>%
group_by(group) %>%
mutate(tmp = max(query * direction) - 0.5,
direction = tmp * 2 * direction) %>%
arrange(id * tmp, .by_group = TRUE) %>%
select(-c(id, tmp))