r - 根据组内参考按组更改值
问题描述
给定一个包含已定义组的表,在每个组中我只有一个参考(查询),我想根据参考值更改列的所有值。
这个值只是 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
但它不起作用。
提前致谢
解决方案
这是一种方法:
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))
结果:
# A tibble: 12 x 4
# 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
推荐阅读
- c# - EF Core求和日期与where语句中的时间跨度
- linux-kernel - 可动态加载的 Linux 安全模块
- python - 在python中读取可扩展的hdf5数据集(用c ++编写)
- c# - 如何在文本文件中读取和写入用户列表
- python - 在python中使用插入排序对单链表进行排序
- python - 将包含括号和数字的字符串转换为浮点数组
- javascript - Snap.js 为多边形点设置动画 S.easing[this.easing] 不是函数
- node.js - 反应 POST 请求(MERN 堆栈)
- flutter - 尝试实现行时如何修复“位置参数”错误
- javascript - 苗条组件 onLoad