首页 > 解决方案 > 如何从列中选择数据并在 R 中生成 nw 列

问题描述

我想生成一个新列来使用 ID 显示期间数据。

我的数据与此数据相似

df1<-read.table(text="ID Location Day Period Group
241	A	am	M1	A
231	D	am	N1	A
241	N	pm	M2	A
234	K	pm	N2	B
231	G	pm	N2	B
300	K	am	M2	A",header=TRUE)

预期的数据是:

df1<-read.table(text="ID Location Day Period Group Match
241	A	am	M1	A	M2
231	D	am	N1	A	N2
234	K	pm	N2	B	NA
300	K	am	M2	A	NA",header=TRUE)

如果有重复的 ID,则只保留一个 Id,并且在 Match 列中处理期间的值。我想要空白而不是 NA

标签: rdplyrtidyverse

解决方案


尝试这个

library(dplyr)

df1 %>% 
  filter(!duplicated(ID)) %>% 
  left_join(
    df1 %>% 
      filter(duplicated(ID)) %>% 
      select(ID, Period), by = "ID") %>% 
  rename(Period = Period.x, Match = Period.y)

或使用group_split

library(dplyr)
library(purrr)

df1 %>% 
  mutate(is_duplicated = duplicated(ID)) %>% 
  group_split(is_duplicated, keep = FALSE) %>% 
  reduce(left_join, by = "ID", suffix = c("", "_match")) %>% 
  select(names(df1), Match = Period_match) 

推荐阅读