在 R 中执行类似于 Excel 的 countif 的操作,但有条件

问题描述 投票:0回答:1

假设这是我的数据。

dt <- data.table(F = c(1, 2, 3, 4, 5, 6, 7, 7, 4, 6, 7, 5),
                 M = c("a", "b", "c", "b", "c", "a", "d", "d", "b", "b", "d", "c"));

请使用 data.table 包或任何非常有效的东西,以便它可以在非常大的数据集上使用。

  • 我需要找出这里的错误。
  • 6 在这里是一个错误,因为它应该只有一种类型的值。即 6 的值是 a 和 b,这是一个错误。您会注意到所有其他都只有单一类型的值。
  • 我希望在右侧创建一列,如果错误则给出 0,如果正确则给出 1。
  • 不应该进行排序/排序。
  • 不要聚集。

理想的解决方案是这样的:

c(0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0)
r data.table
1个回答
4
投票
dt[,error := +(length(unique(M))>1), F][]
    F M error
 1: 1 a     0
 2: 2 b     0
 3: 3 c     0
 4: 4 b     0
 5: 5 c     0
 6: 6 a     1
 7: 7 d     0
 8: 7 d     0
 9: 4 b     0
10: 6 b     1
11: 7 d     0
12: 5 c     0

注意 data.table 提供了

uniqueN
函数来执行
length(unique(..))
—— 由 @ThomasIsCoding

提醒

使用

dt[,error := +(uniqueN(M)>1), F][]
© www.soinside.com 2019 - 2024. All rights reserved.