我想知道如何计算每个观察的整个数据集中变量A和B的类似值的观测数量。
代码显示了我尝试为变量" a"它应该在最佳情况下返回2,如果不能阻止它排除观察,则返回3(参见数据集)。
observation A B
1 1 1 1
2 2 1 1
3 3 3 2
4 4 1 2
5 5 1 1
6 6 1 2
请看这里我尝试自己解决:
observation <- c(1,2,3,4,5,6)
A <- c(1,1,3,1,1,1)
B <- c(1,1,2,2,1,2)
dataset <- data.frame(observation, A, B)
for(i in 1:nrow(dataset)){
if(dataset$A[i]==dataset$A[i]&dataset$B[i]==dataset$B[i])
a <- +1
}
让我们以观察1为例。您可以在数据中看到变量&#34; a&#34;的计数。应该是2.因为观察2和观察5对两个变量都有相似的值;它们都包含1,就像观察1一样。
此外,它不仅应该返回&#34; a&#34;用于观察1,但用于所有观察。所以期望的输出是:
2
2
0
1
2
1
提前致谢!
答案 0 :(得分:1)
library(dplyr)
dataset %>%
group_by(A, B) %>%
mutate(count_of_similar_obs = n() - 1L)
答案 1 :(得分:1)
base
R中的一个班轮:
ave(dataset$observation,dataset$A,dataset$B,FUN=function(x) length(x) -1)
#[1] 2 2 0 1 2 1
答案 2 :(得分:0)
在基础R中,您可以这样做:
dataset[,"tuple_occurences"] <- NA
for(i in 1:nrow(dataset)) {
dataset[i,"tuple_occurences"] <-
sum(dataset$A == dataset[i,"A"] & dataset$B == dataset[i, "B"]) - 1
}
编辑:重写代码,因为我误解了问题