我有一个数据框架,df
df <- structure(list(ID = structure(c("ID961", "ID961",
"ID961", "ID961", "ID726",
"ID726", "ID726", "ID864",
"ID864", "ID864"), label = "ID"),
TYPE = structure(c("blind", "blind", "blind", "blind",
"blind", "blind", "blind", "blind", "blind", "notblind"
), label = "blind or not"), AGE = structure(c(50,
50, 50, 50, 67, 67, 67, 35, 35, 35), label = "Age"), AGEU = structure(c("YEARS",
"YEARS", "YEARS", "YEARS", "YEARS", "YEARS", "YEARS", "YEARS",
"YEARS", "YEARS"), label = "Age Units"), AVISIT = structure(c("26",
"46", "46", "36", "66",
"64", "67", "37", "37",
"67"), label = "treat")), row.names = c(NA,
-10L), class = c("tbl_df", "tbl", "data.frame"), label = "df")
> df
# A tibble: 10 x 5
ID TYPE AGE AGEU AVISIT
<chr> <chr> <dbl> <chr> <chr>
1 ID961 blind 50 YEARS 26
2 ID961 blind 50 YEARS 46
3 ID961 blind 50 YEARS 46
4 ID961 blind 50 YEARS 36
5 ID726 blind 67 YEARS 66
6 ID726 blind 67 YEARS 64
7 ID726 blind 67 YEARS 67
8 ID864 blind 35 YEARS 37
9 ID864 blind 35 YEARS 37
10 ID864 notblind 35 YEARS 67 对于每个ID,我想知道匹配该ID的每个列条目是否是统一的。
例如:
ID961 - TYPE是一样的,AGE是一样的,AGEU是一样的,但是AVISIT是不一样的。
ID726 - TYPE是一样的,AGE是一样的,AGEU是一样的,但是AVISIT是不一样的。
ID864 - AGE是一样的,AGEU是一样的,但是AVISIT是不一样的,TYPE是不一样的。
因此,我希望返回的是AGE和AGEU在ID中都是统一的,例如:
uniform
[1] "AGE" "AGEU"我不知道该怎么做-我知道我可以用
match <- df %>% group_by(ID)但那就不知道怎么继续下去了。
发布于 2020-08-28 11:29:35
也许你能做到:
library(dplyr)
df %>%
group_by(ID) %>%
summarise(across(everything(), ~ n_distinct(.x) == 1), .groups = "drop")
# Or deprecated way
df %>%
group_by(ID) %>%
summarise_all(~n_distinct(.x) == 1)
# A tibble: 3 x 5
ID TYPE AGE AGEU AVISIT
<chr> <lgl> <lgl> <lgl> <lgl>
1 ID726 TRUE TRUE TRUE FALSE
2 ID864 FALSE TRUE TRUE FALSE
3 ID961 TRUE TRUE TRUE FALSE 如果你想要列名,你可以:
df %>%
group_by(ID) %>%
summarise(across(everything(), ~ n_distinct(.x) == 1), .groups = "drop") %>%
rowwise() %>%
transmute(ID, uniform = toString(names(.)[which(c_across(cols = -ID)) + 1]))
# Or ...
df %>%
group_by(ID) %>%
summarise_all(~n_distinct(.x) == 1) %>%
transmute(ID,
uniform = pmap_chr(.[-1], ~ toString(names(df)[c(FALSE, ...)])))
# A tibble: 3 x 2
# Rowwise:
ID uniform
<chr> <chr>
1 ID726 TYPE, AGE, AGEU
2 ID864 AGE, AGEU
3 ID961 TYPE, AGE, AGEUhttps://stackoverflow.com/questions/63632808
复制相似问题