【问题标题】:count of matching rows in R [duplicate]R中匹配行的计数[重复]
【发布时间】:2016-01-06 12:45:56
【问题描述】:

下面是示例表/数据框。第三个属性(count)会给出相似行的计数(attribute1+attribute2)

╔════╦═════════════╦═════════════╦══════════════════════════════╗
║ ID ║ Attribute 1 ║ Attribute 2 ║ count(Attribute1+Attribute2) ║
╠════╬═════════════╬═════════════╬══════════════════════════════╣
║  1 ║ A           ║ AA          ║                            3 ║
║  2 ║ B           ║ CC          ║                            1 ║
║  3 ║ C           ║ BB          ║                            2 ║
║  4 ║ A           ║ AA          ║                            3 ║
║  5 ║ C           ║ BB          ║                            2 ║
║  6 ║ D           ║ AA          ║                            1 ║
║  7 ║ B           ║ AA          ║                            1 ║
║  8 ║ C           ║ DD          ║                            1 ║
║  9 ║ A           ║ AB          ║                            1 ║
║ 10 ║ A           ║ AA          ║                            3 ║
╚════╩═════════════╩═════════════╩══════════════════════════════╝

更新:

感谢akrundanas.zuokas 的帮助。 我期望的最终输出看起来像这样。我从每个计数组中选择 50% .ex:对于 ID 1、4、10,计数为 3。我只需要为每个计数组选择 2(50%)因此我应该得到(A,AA)两次.

 ID    Attribute 1  Attribute 2     count(Attribute1+Attribute2)
        1   A   AA  3
        2   B   CC  1
        3   C   BB  2
        4   A   AA  3
        6   D   AA  1
        7   B   AA  1
        8   C   DD  1
        9   A   AB  1

【问题讨论】:

  • 条件不明确
  • 你在第四列数什么
  • 第4列是attribute1 and attribute 2一起的计数
  • 将来使用dput 或其他更合适的方式来共享您的数据。 “漂亮”的 ASCII 表不能轻易转移到其他人的 R 会话中。

标签: r


【解决方案1】:

鉴于您的数据位于df

library(data.table)

dt <- as.data.table(df)
dt[, count := .N, by = list(Attribute1, Attribute2)]

【讨论】:

  • 你有什么理由 pasteing 列?我认为这将花费更长的时间而不是仅按两者进行分组..?
  • 你是对的 - 只是从 SQL “翻译”而来。
  • 不客气,Zahoor Kazi!您也可以将答案标记为已接受。
【解决方案2】:

我们可以试试

library(dplyr)
df1 %>%
     group_by(attribute1, attribute2) %>%
     mutate(Count= n())

【讨论】:

  • %&gt;% 是什么?我无法使用它运行代码
  • @ZahoorKazi 它是连接 lhs 和 rhs 的管道/链
  • 如何为每个计数组只选择几条记录(比如 30%)?
  • @ZahoorKazi 你可以使用df1 %&gt;% group_by(attribute1, attribute2) %&gt;% slice(seq(round(0.3*n())))
  • 感谢 akrun,但这似乎给出了一些不同的结果。我需要得到的是,ID 为 1、4、10 的行出现了 3 次。现在我只需要选择它的 30%(不考虑 ID 的 1 行)。其他计数组也一样
猜你喜欢
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
相关资源
最近更新 更多