【问题标题】:Count Unique ID per Attribute per Variable计算每个变量每个属性的唯一 ID
【发布时间】:2021-02-02 03:45:43
【问题描述】:

我的目标是计算数据框中每个变量的顶级属性的频率,但我不想只计算属性本身的频率,而是按所选属性的唯一 ID 来计算。

如果我只想计算每个变量的顶级属性的频率,我可以使用以下代码:

lapply(df, function(attribute){
j <- as.data.frame(sort(table(attribute), decreasing=TRUE)[1:10])
})

我想完全符合上述要求,但要确保每个 id 都是唯一的。我无法过滤数据框,因为它位于属性级别,并且我会丢失某些属性/变量的数据。

example input data for testing:
      id  v1  v2   v3  v4
    1  7   1   A  100  98 
    2  7   2   A   98  97
    3  8   1   C   50  80
    4  8   1   C   78  75
    5  8   1   C   50  62
    6  9   3   C   75  75

【问题讨论】:

  • 您想计算每个 id 中每个变量的最高频率吗?那么id = 7v1 的前10 个属性,然后v2 的前10 个属性等等?

标签: r


【解决方案1】:

获取长格式数据,统计每列中id的每个值的出现次数,只保留前10个值。

library(dplyr)

df %>%
  mutate(across(-id, as.character)) %>%
  tidyr::pivot_longer(cols = -id) %>%
  count(id, name, value) %>%
  group_by(id, name) %>%
  slice_max(n, n = 10)

要计算列中每个值的唯一 ID,您可以尝试:

df %>%
  mutate(across(-id, as.character)) %>%
  tidyr::pivot_longer(cols = -id) %>%
  group_by(name, value) %>%
  summarise(n = n_distinct(id))

【讨论】:

  • 这非常接近,但我认为您正在计算 id、name 和 value。我基本上想要你的输出,然后按名称和值分组并返回每个的计数。这将确保名称和值的所有计数都具有唯一的 ID
  • 您的意思是在上述输出中添加%&gt;% count(name, value) 吗?我不确定我是否理解正确。
  • 我想计算唯一ID,按名称和值分组。上面的代码在名称和值级别计算相同 id 的频率。我使用了代码 'df2
  • @AustinGilbert 更新的答案可能会有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-06
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
  • 1970-01-01
  • 2021-09-30
  • 2011-02-07
相关资源
最近更新 更多