问题描述
我有一个重复的ID和一个组标签的数据框。如何使用tidyr
或相关工具从第一个数据帧转到第二个数据帧?我需要删除重复的行,并标记每行是否存在于“ a”组,“ b”组或“两者”中。
library(tidyverse)
df <- tibble(id=c(1,2,3,4,4),label=c("a","a","b","b"))
# A tibble: 6 x 2
id label
<dbl> <chr>
1 1 a
2 2 a
3 2 b
4 3 b
5 4 a
6 4 b
df_desired <- tibble(id=c(1,"both","both"))
# A tibble: 4 x 2
id label
<dbl> <chr>
1 1 a
2 2 both
3 3 b
4 4 both
解决方法
使用dplyr
的另一种方法可以是:
library(tidyverse)
#Data
df <- tibble(id=c(1,2,3,4,4),label=c("a","a","b","b"))
#Code
df %>% group_by(id) %>% summarise_all(toString) %>%
mutate(label=ifelse(nchar(label)==1,label,'both'))
输出:
# A tibble: 4 x 2
id label
<dbl> <chr>
1 1 a
2 2 both
3 3 b
4 4 both
,
这是使用summarise
df %>%
group_by(id) %>%
summarise(label = if_else(length(unique(label)) == 2,"both",first(label)),.groups = "drop")
# A tibble: 4 x 2
id label
<dbl> <chr>
1 1 a
2 2 both
3 3 b
4 4 both