在一个列中查找值,在另一列中查找几个不同的值

时间:2018-08-14 07:54:20

标签: r

我有一个很大的数据集,其中有一列用于标识和出生日期。不幸的是,一些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循环来做到这一点,但我想知道是否有更简单,更快捷的方法?或者您将如何处理?

1 个答案:

答案 0 :(得分:0)

x <- rowSums(table(sample$id, sample$birthday) > 0)
names(x[x>1])

[1] "val2" "val3"

这意味着val2val3 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