gpt4 book ai didi

r - 如何使用 R 总结多个数字和基于文本的条件子集

转载 作者:行者123 更新时间:2023-12-05 09:02:02 26 4
gpt4 key购买 nike

我有一个表,每个 ID 包含两行。

table <- tibble(
id = c(1,1,2,2,3,3,4,4,5,5),
row1 = c(2,5,2,5,1,3,2,5,3,2),
row2 = c("foo", "other foo", "bar", "bar", "bar", "bar other", "other", "foo", "other", "other")
)
> table
# A tibble: 10 × 3
id row1 row2
<dbl> <dbl> <chr>
1 1 2 foo
2 1 5 other foo
3 2 2 bar
4 2 5 bar
5 3 1 bar
6 3 3 bar other
7 4 2 other
8 4 4 foo
9 5 3 other
10 5 2 other

我想连续根据三个规则将表格解析为每个 ID 的一行:

  1. 如果对于每个ID,有一行row1大于等于5,则选择row1小于5的行。
  2. 否则,如果对于每个 ID,有一行 row2 包含单词“other”,则选择 row2 不包含单词“other”的行
  3. 否则,对于每个 ID,选择第一行。

我觉得一定有更直接的方法来做到这一点。到目前为止,这是我的尝试,但我无法弄清楚如何解析 NA 以返回“bar”。

table %>%
group_by(id) %>%
summarise(
row1 = ifelse(max(row1) >= 5,
first(row1[row1 < 5]),
ifelse(
grep("other", row2),
ifelse(
!is.na(first(row1[grep("other", row2, invert = T)])),
first(row1[grep("other", row2, invert = T)]),
first(row1)),
first(row1))
),
row2 = ifelse(
max(row1) >= 5,
first(row2[row1 < 5]),
ifelse(
grep("other", row2),
ifelse(
!is.na(first(row2[grep("other", row2, invert = T)])),
first(row2[grep("other", row2, invert = T)]),
first(row2)),
first(row2)
)
)
)

# A tibble: 5 × 3
id row1 row2
<dbl> <dbl> <chr>
1 1 2 foo
2 2 2 NA
3 3 1 bar
4 4 2 foo
5 5 3 other

期望的输出:

<表类="s-表"><头>id第1行第2行<正文>12富22栏31栏42其他53其他

非常感谢您的帮助。

最佳答案

这是我们可以做到的:

library(dplyr)
library(tidyr)
library(stringr)

table %>%
group_by(id) %>%
separate_rows(row2) %>%
mutate(x = ifelse(row1>=5, min(row1),NA),
y = ifelse(str_detect(row2, 'other'), !str_detect(row2, 'other'), NA)) %>%
slice(1) %>%
select(-c(x, y))
    id  row1 row2 
<dbl> <dbl> <chr>
1 1 2 foo
2 2 2 bar
3 3 1 bar
4 4 2 other
5 5 3 other

关于r - 如何使用 R 总结多个数字和基于文本的条件子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72155229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com