我有一个很大的数据集,其中有一列用于标识和出生日期。不幸的是,一些ID名称用于不同的个人。
sample <-
data.frame(id = c("val1", "val1", "val1", "val1", "val2", "val2", "val2",
"val3", "val3", "val3", "val3"),
birthday = c("1", "1", "1", "1", "2", "3", "4", "5", "6", "7", "7"))
现在,我正在尝试查找具有不同生日的ID,以便能够对其重命名。
我知道我可以使用for循环来做到这一点,但我想知道是否有更简单,更快捷的方法?或者您将如何处理?
答案 0 :(得分:0)
x <- rowSums(table(sample$id, sample$birthday) > 0)
names(x[x>1])
[1] "val2" "val3"
这意味着val2
和val3
id
有多个生日。
或:aggregate(birthday ~ id, sample, function(x) length(unique(x)))
给出每个ID的唯一生日数:
id birthday
1 val1 1
2 val2 3
3 val3 3
更新:对于您想要的输出,我确保id
是字符类型。您可以执行以下操作:
sample$id <- as.character(sample$id)
x <- rowSums(table(sample$id, sample$birthday) > 0)
y <- sample$id %in% names(x[x>1])
sample[y,]$id <- paste0("NEW", sample[y,]$birthday)
sample
id birthday
1 val1 1
2 val1 1
3 val1 1
4 val1 1
5 NEW2 2
6 NEW3 3
7 NEW4 4
8 NEW5 5
9 NEW6 6
10 NEW7 7
11 NEW7 7