计算满足(逻辑)条件r的数据集中的出现次数

时间:2017-01-10 15:54:57

标签: r count logical-operators

我想知道如何计算每个观察的整个数据集中变量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

提前致谢!

3 个答案:

答案 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
}

编辑:重写代码,因为我误解了问题