请参阅附图,了解我可以描述问题的最佳方式。
我保证我确实尝试过对此进行研究,并且我看到了一些非常接近的答案,但是其中很多都要求列出每个变量(在这张图片中,这将是每次遇到的#),而我的数据大致相同1500万行代码,大约有10,000个不同的代码#。
我将不胜感激!
答案 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))