如何计算列中不同数量的变量,然后按另一列中的数字列出该计数

时间:2016-09-12 04:27:36

标签: r unique

请参阅附图,了解我可以描述问题的最佳方式。

我保证我确实尝试过对此进行研究,并且我看到了一些非常接近的答案,但是其中很多都要求列出每个变量(在这张图片中,这将是每次遇到的#),而我的数据大致相同1500万行代码,大约有10,000个不同的代码#。

question

我将不胜感激!

2 个答案:

答案 0 :(得分:2)

作为替代方案,您还可以使用 data.table 包。特别是在大型数据集上, data.table 将为您带来巨大的性能提升。应用于@ r2evans使用的数据:

library(data.table)
setDT(df)[, .(n_uniq_enc = uniqueN(encounter)), by = patient]

这将导致以下结果:

   patient n_uniq_enc
1:     123          5
2:     456          5

答案 1 :(得分:0)

缺乏可重复的示例,这里有一些示例数据:

set.seed(42)
df <- data.frame(patient = sample(c(123,456), size=30, replace=TRUE), encounter=sample(c(12,34,56,78,90), size=30, replace=TRUE))
head(df)
#   patient encounter
# 1     456        78
# 2     456        90
# 3     123        34
# 4     456        78
# 5     456        12
# 6     456        90

基地R:

aggregate(x = df$encounter, by = list(patient = df$patient),
          FUN = function(a) length(unique(a)))
#   patient x
# 1     123 5
# 2     456 5

或(通过@ 20100721的建议):

aggregate(encounter~.,FUN = function(t) length(unique(t)),data = df)

使用dplyr

library(dplyr)
group_by(df, patient) %>%
  summarize(numencounters = length(unique(encounter)))
# # A tibble: 2 x 2
#   patient numencounters
#     <dbl>         <int>
# 1     123             5
# 2     456             5

更新:@ 2100721通知我n_distinct,与length(unique(...))实际相同:

group_by(df, patient) %>%
  summarize(numencounters = n_distinct(encounter))