作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我在 R 中有这个数据框:
x <-data.frame(group=c("A","A","A", "B","B", "C","C","C"), cond=c("g1", "g2", "g1", "g3", "g2", "g2", "g1", "g2"), order=c(1,2,3,2,1,2,3,1))
group cond order
A g1 1
A g2 2
A g1 3
B g3 2
B g2 1
C g2 2
C g1 3
C g2 1
我希望根据顺序变量对组进行排序以生成两个变量:v1) yes/no whether cond=="g1"for any of the previous rows in a group, v2) yes/no whether, for a given行,组中有前一行具有不同的 cond 值(v2=no,当 group=C 和 order=1 或 2,但 v2=yes,当 group=C 和 order=3)。我知道我可以使用 dplyr 来安排组:
x %>% group_by(group) %>% arrange(order, .by_group=T)
但我不知道从那里去哪里,因为 lag()
和 lead()
仅适用于紧邻之前或之后的行。
最佳答案
cond
。 (为此我使用了 pivot_wider
。)cond
代码的累计和 > 0 时,表示该值已出现在当前或前一行中。我们可以使用 dplyr::lag
排除当前行。cond
值。如果大于 1,则我们知道前一行的值一定与当前行的值不同。选择
清除单热代码和其他帮助列来进行清理。library(dplyr)
library(tidyr)
x <-data.frame(
group=c("A","A","A", "B","B", "C","C","C"),
cond=c("g1", "g2", "g1", "g3", "g2", "g2", "g1", "g2"),
order=c(1,2,3,2,1,2,3,1)
)
x2 <- x %>%
mutate(cond_pivot = cond, cond_value = 1) %>%
pivot_wider(
names_from = cond_pivot,
values_from = cond_value,
values_fill = 0
) %>%
group_by(group) %>%
arrange(order, .by_group = TRUE) %>%
mutate(
across(g1:g3, ~ cumsum(.x) > 0, .names = "{.col}_seen_yet"),
n_seen_so_far = rowSums(across(g1_seen_yet:g3_seen_yet)),
v1 = dplyr::lag(g1_seen_yet, default = FALSE),
v2 = n_seen_so_far > 1
) %>%
select(group:order, v1:v2)
输出:
# A tibble: 8 x 5
# Groups: group [3]
group cond order v1 v2
<chr> <chr> <dbl> <lgl> <lgl>
1 A g1 1 FALSE FALSE
2 A g2 2 TRUE TRUE
3 A g1 3 TRUE TRUE
4 B g2 1 FALSE FALSE
5 B g3 2 FALSE TRUE
6 C g2 1 FALSE FALSE
7 C g2 2 FALSE FALSE
8 C g1 3 FALSE TRUE
关于r - 检查组 R 中的任何前一行是否满足条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71165855/
假设我在 R 中有这个数据框: x % group_by(group) %>% arrange(order, .by_group=T) 但我不知道从那里去哪里,因为 lag() 和 lead() 仅适
我在 phpmyadmin 网站上有这条消息 The phpMyAdmin configuration storage is not completely configured, some exten
我是一名优秀的程序员,十分优秀!