提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我想比较 R 中两行一列中列出的值。 行通过 ID 变量标识。 我想生成一个新变量,告诉我两个值中的哪一个低于另一个。 这里有一个例子:
value id new_var
1 1 lower
2 1 higher
5 2 higher
3 2 lower
10 3 lower
11 3 higher
2 4 lower
1 4 higher
谢谢!
如果每组有两个以上的元素,则进行分组,并使用ifelse/case_when
创建条件以创建“new_var”
library(dplyr)
df1 %>%
group_by(id) %>%
mutate(new_var = case_when(value == max(value) ~ "higher",
TRUE ~ "lower")) %>%
ungroup
# A tibble: 8 × 3
value id new_var
<int> <int> <chr>
1 1 1 lower
2 2 1 higher
3 5 2 higher
4 3 2 lower
5 10 3 lower
6 11 3 higher
7 2 4 higher
8 1 4 lower
一个选项也是arrange
,然后使用rep
按顺序创建一个新列(假设每个 id 有 2 个元素)
df1 %>%
arrange(id, value) %>%
mutate(new_var = rep(c("lower", "higher"), length.out = n()))
df1 <- structure(list(value = c(1L, 2L, 5L, 3L, 10L, 11L, 2L, 1L), id = c(1L,
1L, 2L, 2L, 3L, 3L, 4L, 4L)), row.names = c(NA, -8L), class = "data.frame")
我们可以使用以min
为条件value
ifelse
语句来mutate
new_var
:
library(dplyr)
df %>%
group_by(id) %>%
mutate(new_var = ifelse(value == min(value), "lower", NA_character_)) %>%
ungroup()
value id new_var
<int> <int> <chr>
1 1 1 lower
2 2 1 NA
3 5 2 NA
4 3 2 lower
5 10 3 lower
6 11 3 NA
7 2 4 NA
8 1 4 lower
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.