我有一些“事物”的不同独特模型的许多属性的直方图。 当我做一个实验时,我发现了多个独特的模型。考虑到整个实验样本集,我需要找到每个属性的直方图。聚合直方图数据
实施例:
与数据帧df
像下面,与一堆id's
并且对于每个id
有一堆名为prop1
,prop2
等属性。
set.seed(1)
df <- data.frame(id = sample(1:5, 6, replace = TRUE),
prop1 = rep(c("A", "B"), 3),
prop2 = sample(c(TRUE, FALSE), 6, replace = TRUE),
prop3=sample(3:6, 6, replace = TRUE))
> df
id prop1 prop2 prop3
1 2 A FALSE 4
2 2 B TRUE 4
3 3 A FALSE 6
4 1 B TRUE 5
5 3 A FALSE 3
6 3 B FALSE 4
对于eqch独特id
直方图计算为每个属性并且将结果存储在一个列表l1
保存用于每id
基础上的每个属性的直方图。
# Create histogram for each property
df[-1] <- lapply(df[-1], as.factor)
fun1 <- function(df, n){as.data.frame(t(sapply(split(df, df$id), function(i)
prop.table(table(i[,n])))))}
l1 <- sapply(2:ncol(df), function(i)fun1(df, i))
names(l1) <- names(df[-1])
> l1
$prop1
A B
1 0.0000000 1.0000000
2 0.5000000 0.5000000
3 0.6666667 0.3333333
$prop2
FALSE TRUE
1 0.0 1.0
2 0.5 0.5
3 1.0 0.0
$prop3
3 4 5 6
1 0.0000000 0.0000000 1 0.0000000
2 0.0000000 1.0000000 0 0.0000000
3 0.3333333 0.3333333 0 0.3333333
现在下面我有一个新的ids
一组新的实验,重复。我需要使用l1
的参考数据计算整个id's
集合中每个属性的直方图。
某些id's
可能不存在;一些id's
不存在于原始df
和l1
可以存在于ids
- 例如4
在ids
不存在于l1
- 然而,这些可以从直方图计算排除,但捕获为数据帧与排除id
和计数排除的每个id
。
ids <- sample(1:4, 7, replace = TRUE)
> ids
[1] 2 3 1 3 3 2 4
更新: 预期输出 - 我显示它作为一个列表 - 的任何其他数据结构,其是比较合适的,可以使用。
> l2
$prop1
A B
1 0.500 0.500
$prop2
FALSE TRUE
1 0.667 0.333
$prop3
3 4 5 6
1 0.167 0.500 0.167 0.167
base R solution is preferred。
更新:澄清如何计算输出。
ids
的计数 - 一个1,2,2,3和3和4.因为我们没有4的数据,所以有用的ids
是1,2和3,它们之间的总计数为ids
。
对于prop1
,为ids
的聚合的直方图可以计算如下
A = (1*0.0 + 2*0.5 + 3*0.6667)/6 = 0.5
B = (1*1.0 + 2*0.5 + 3*0.3333)/6 = 0.5
新的数据集将有一个不同的直方图吧?所以你想重新规范你的'prop.table' w.r.t.新的数据?你能包括预期的产出吗? –
@SandipanDey - 增加预期产量 – user3206440