【发布时间】:2018-04-12 05:52:22
【问题描述】:
假设我有一个数据框:
df <- data.frame(SID=sample(1:4,15,replace=T), Var1=c(rep("A",5),rep("B",5),rep("C",5)), Var2=sample(2:4,15,replace=T))
结果是这样的:
SID Var1 Var2
1 4 A 2
2 3 A 2
3 4 A 3
4 3 A 3
5 1 A 4
6 1 B 2
7 3 B 2
8 4 B 4
9 4 B 4
10 3 B 2
11 2 C 2
12 2 C 2
13 4 C 4
14 2 C 4
15 3 C 3
我希望完成的是找到排除给定行的 Var1 的唯一 SID 的计数(请参阅下面的更新,这应该说 唯一(SID,Var1)组合的计数)从这个计数中,计数在 Var2 上分组。所以对于上面的例子,我想输出:
SID Var1 Var2 Count.Excluding.Var1
1 4 A 2 3
2 3 A 2 3
3 4 A 3 1
4 3 A 3 1
5 1 A 4 3
6 1 B 2 3
7 3 B 2 3
8 4 B 4 3
9 4 B 4 3
10 3 B 2 3
11 2 C 2 4
12 2 C 2 4
13 4 C 4 2
14 2 C 4 2
15 3 C 3 2
对于第一次观察,我们的计数为 3,因为对于给定的 Var2 值(在本例中为 2)有 3 个唯一组合(SID,Var1),其中 Var1 != A(第一次观察的 Var1 值) -- 具体来说,计数包括观察 6、7 和 11,但不包括 12,因为我们已经考虑了 (SID, Var1)=(2,C) 而不是第 2 行,因为我们不希望 Var1 是“A”。所有这些行都具有相同的 Var2 值。
我更喜欢使用 dplyr 函数和 %>% 运算符。 &
更新
对于上面的混淆和我的错误解释,我深表歉意。我已经更正了我打算在括号中要求的内容,但我也保留了我原来的措辞,因为大多数答案似乎都是这样解释的。
对于示例,我很抱歉没有设置种子。关于第 11 行和第 12 行的 Count.Excluding.Var1 似乎有些混淆。使用唯一的 (SID, Var1) 组合,第 11 行和第 12 行应该是有意义的,因为这些计数为第 1、2、6 和 7 行异或 8。
【问题讨论】:
-
上述逻辑中
Var2有什么用? -
这是我为二进制朴素贝叶斯问题制作的一个通用示例,其中 Var2 是由 Var1 表示的类的特征,而 SID 类似于观察结果。所以我实际上想要做的是找到所有包含 Var2 值但不属于 Var1 类的唯一观察值。
-
正如@MKR 提到的,逻辑不清楚。请检查预期的输出是否正确
-
第 11 行和第 12 行是否正确?我认为
Count.Excluding.Var1应该是 3 -
为什么第三行的 count 是 1?