r语言 - 以 data.table 中的第二个标识符为条件的组的平均观测值数



我有一个具有以下结构的数据框

V1   V2
X1   Y1
X1   Y2
X2   Y2
X2   Y2
X3   Y4
X3   Y5
X3   Y5
X4   Y6
X4   Y6
X4   Y6

我想计算V1V2之间的平均对数,以便在data.tableV1。最终结果应如下所示,并包含观察到的 V1 对的平均数量。

V1   avg.num.pairs
X1    1.0
X2    2.0
X3    1.5
X4    3.0

这个问题有什么优雅的解决方案吗?

一个dplyr选项可能是:

df %>%
group_by(V1) %>%
summarise(V2 = n()/n_distinct(V2))
V1       V2
<chr> <dbl>
1 X1      1  
2 X2      2  
3 X3      1.5
4 X4      3  

data.table相同:

setDT(df)[, .(V2 = .N/uniqueN(V2)), by = V1]

一个简单的基本R解决方案是使用aggregate,即

dfout <- aggregate(V2 ~ V1,df, function(x) length(x)/length(unique(x)))

这样

> dfout
V1  V2
1 X1 1.0
2 X2 2.0
3 X3 1.5
4 X4 3.0

数据

df <- structure(list(V1 = c("X1", "X1", "X2", "X2", "X3", "X3", "X3", 
"X4", "X4", "X4"), V2 = c("Y1", "Y2", "Y2", "Y2", "Y4", "Y5", 
"Y5", "Y6", "Y6", "Y6")), class = "data.frame", row.names = c(NA, 
-10L))

最新更新