我有这样的表。列名V1,V2,V3,V4
V1 | V2 | V3 | V4
2 | 4 | 3 | 1
2 | 1 | 3 | 1
2 | 3 | NA | NA
2 | 4 | 3 | 1
3 | NA | NA | NA
如何计算数字“3”的出现次数,除非数字“1”在同一行后出现,我不希望它被计算在内。
在上面的例子中,值“3”的出现是2次
编辑:
这是我的数据样本,31列...我想要做的是,我想计算特定值发生了多少次,除非下一列中有另一个特定值。< / p> 从图片的例子来看,我想计算值112的出现次数,它发生了多少次?如果“116”出现在下一栏中,则计算除外。
如果需要更多说明,请发表评论。
答案 0 :(得分:3)
我试试:
sum(tb[,1:3]==3 & (tb[,2:4]!=1 | is.na(tb[,2:4])),na.rm=TRUE)
#[1] 2
我使用的数据:
tb <- structure(c(2L, 2L, 2L, 2L, 3L, 4L, 1L, 3L, 4L, NA, 3L, 3L, NA,
3L, NA, 1L, 1L, NA, 1L, NA), .Dim = c(5L, 4L), .Dimnames = list(
NULL, c("V1", "V2", "V3", "V4")))
答案 1 :(得分:2)
在下面的代码中,我假设&#34;&#34;&#34;表示右侧的列。
你想要的是事件的总和:&#34;列x和&amp ;;列x + 1与1&#34;不同。
您可以将其翻译成以下代码(虽然可能效率不高):
TOTAL<-0
for( i in 1:(ncol(df)-1){
TOTAL<-TOTAL + sum(df[,i]==3 & df[,i+1]!=1, na.rm= TRUE)
}
修改:考虑最后一栏
TOTAL<-TOTAL+sum(df[,ncol(df)]==3 , na.rm = TRUE)
所以完整的代码是:
TOTAL<-0
for( i in 1:(ncol(df)-1){
TOTAL<-TOTAL + sum(df[,i]==3 & df[,i+1]!=1,na.rm = TRUE)
}
TOTAL<-TOTAL+sum(df[,ncol(df)]==3, na.rm = TRUE)