gpt4 book ai didi

r - case_when 重复行

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

这是我的虚拟数据:

df <- tibble(col1 = c(runif(5, min = 0, max = 5)),
col2 = c("a", "b", "c", "d", "e"),
col3 = c("blue", "blue", "blue", "red", "orange"))

col1 col2 col3
<dbl> <chr> <chr>
1 0.200 a blue
2 1.99 b blue
3 0.663 c blue
4 1.79 d red
5 3.82 e orange

我的目标是使用条件格式添加唯一标识符,但是,对于同一条件,我经常有多个标识符,因此它们只会覆盖另一个。

df %>% mutate(col4 = case_when(
col2 %in% "b" & col3 %in% "blue" ~ "id1",
col2 %in% "b" & col3 %in% "blue" ~ "id2",
TRUE ~ NA_character_
))

col1 col2 col3 col4
<dbl> <chr> <chr> <chr>
1 0.345 a blue NA
2 0.250 b blue id1
3 1.37 c blue NA
4 3.99 d red NA
5 2.14 e orange NA

我想要的输出只是复制该行!

   col1 col2  col3   col4 
<dbl> <chr> <chr> <chr>
1 0.345 a blue NA
2 0.250 b blue id1
3 0.250 b blue id2
3 1.37 c blue NA
4 3.99 d red NA
5 2.14 e orange NA

最佳答案

我们可以先复制行,然后再执行case_when

library(dplyr)
library(tidyr)
library(data.table)
library(stringr)
df %>%
mutate(i1 = col2 == 'b' & col3 == 'blue') %>%
uncount(case_when(i1~ 2, TRUE ~ 1)) %>%
mutate(col4 = case_when(i1 ~ str_c('id', rowid(col2, col3))), i1 = NULL)

-输出

# A tibble: 6 x 4
# col1 col2 col3 col4
# <dbl> <chr> <chr> <chr>
#1 2.43 a blue <NA>
#2 1.23 b blue id1
#3 1.23 b blue id2
#4 1.40 c blue <NA>
#5 0.650 d red <NA>
#6 3.65 e orange <NA>

或者也可以用list包裹起来,然后unnest

df %>%
mutate(col4 = case_when(col2 == 'b' & col3 == 'blue'
~ list(str_c('id', 1:2)), TRUE ~ list(NA_character_))) %>%
unnest(col4)

关于r - case_when 重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67462099/

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