R 用ID和日期替换类别值
我有一个每天可以分为两类的ID列表,让我们称它们为“a”和“B”。ID通常一天显示0-2次,但出现的频率可能更高。由于数据质量不高,一些ID在某一天同时显示为A和B。因此,与其看起来像这样:R 用ID和日期替换类别值,r,R,我有一个每天可以分为两类的ID列表,让我们称它们为“a”和“B”。ID通常一天显示0-2次,但出现的频率可能更高。由于数据质量不高,一些ID在某一天同时显示为A和B。因此,与其看起来像这样: ID Date Category 1111 2020-09-10 A 1111 2020-09-10 A 1111 2020-09-10 A ID Date Category 1111 2020-09-10 A 1111 2020-09-10 B
ID Date Category
1111 2020-09-10 A
1111 2020-09-10 A
1111 2020-09-10 A
ID Date Category
1111 2020-09-10 A
1111 2020-09-10 B
1111 2020-09-10 B
它们看起来像这样:
ID Date Category
1111 2020-09-10 A
1111 2020-09-10 A
1111 2020-09-10 A
ID Date Category
1111 2020-09-10 A
1111 2020-09-10 B
1111 2020-09-10 B
我需要修正它,这样如果一个ID在一天中是类别A的一部分,那么该ID在该天的所有记录都会显示类别A。但是如果该天的所有记录都显示为“B”,那么无论该ID以前是如何分类的,它都不会受到影响。因为我们只为每个组的“类别”查找一个“A”实例,我们可以使用
if/else
,它寻找返回length
1的逻辑表达式
library(dplyr)
df %>%
group_by(ID, Date) %>%
mutate(Category = if("A" %in% Category) "A" else "B")
# A tibble: 6 x 3
# Groups: ID, Date [2]
# ID Date Category
# <dbl> <chr> <chr>
#1 1111 2020-09-10 A
#2 1111 2020-09-10 A
#3 1111 2020-09-10 A
#4 2222 2020-09-11 B
#5 2222 2020-09-11 B
#6 2222 2020-09-11 B
数据
像这样的东西
library("dplyr")
df = data.frame("ID" = c(1111, 1111, 1111, 2222, 2222, 2222),
"Date" = c("2020-09-10", "2020-09-10", "2020-09-10",
"2020-09-11", "2020-09-11", "2020-09-11"),
"Category" = c("A", "B", "B", "B", "B", "B"))
df %>%
group_by(ID, Date) %>%
mutate(Category = ifelse("A" %in% Category, "A", "B"))
ID日期类别
111112020-09-10a
111112020-09-10a
311112020-09-10a
422222020-09-11b
522222020-09-11b
622222020-09-11b
ID Date Category
<dbl> <chr> <chr>
1 1111 2020-09-10 A
2 1111 2020-09-10 A
3 1111 2020-09-10 A
4 2222 2020-09-11 B
5 2222 2020-09-11 B
6 2222 2020-09-11 B