r - 数据表中的特殊事件计数

标签 r algorithm find-occurrences

(序言)
我不知道这是不是合适的地方…我实际上有一个问题解决/优化的问题,在一个表上计数如果不是的话。很抱歉,应该减价。
这是数据框

dat <- data.frame(id=letters[1:5],matrix(c(0,0,1,0,0,  0,1,0,1,1,  0,0,2,1,0, 1,0,2,1,1, 0,0,2,0,0, 0,1,2,1,0),5,6)) 

# 
#    id X1 X2 X3 X4 X5 X6 
# 1  a  0  0  0  1  0  0 
# 2  b  0  1  0  0  0  1
# 3  c  1  0  2  2  2  2
# 4  d  0  1  1  1  0  1 
# 5  e  0  1  0  1  0  0 

我想沿着每一行数数,从1到0的次数和从1到0的次数。所以最终的结果应该是
# id N1 N0 
# a  1  1 
# b  2  1 
# c  1  1 
# d  2  1 
# e  2  2 

我确实找到了一个算法,但它更像是C/FORTRAN风格(见下文),我不敢相信没有一种更简单、更优雅的方法可以在R中实现它。非常感谢您的帮助或提示。
nr <- nrow(dat) 
nc <- ncol(dat) 
rownames(dat) <- seq(1,nr,1) 
colnames(dat) <- seq(1,nc,1) 
dat$N1 <- NULL 
dat$N2 <- NULL 
for (i in 1:nr) { 
  n1 <- 0 
  n0 <- 0 
  j <- 2 
  while (!(j>nc)) { 
    k <- j 
    if (dat[i,k] == 1) { 
      n1 <- n1 + 1 
      k <- j + 1 
      while (!(k>nc)) { 
        if (dat[i,k] == 0) { 
          n0 <- n0 + 1 
          break 
        } 
        k <- k + 1 
      } 
    } 
    j <- k 
    j <- j + 1 
  } 
  dat$N1[i] <- n1 
  dat$N0[i] <- n0 
}

最佳答案

不确定我是否完全明白,但你可以试试:

cbind(dat["id"],N0=rowSums(dat[,3:7]==1 & dat[,2:6]!=1)+(dat[,2]==1),
                N1=rowSums(dat[,3:7]==0 & dat[,2:6]==1))  
#  id N0 N1
#1  a  1  1
#2  b  2  1
#3  c  1  1
#4  d  2  1
#5  e  2  2

关于r - 数据表中的特殊事件计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35726342/

相关文章:

algorithm - 什么是更大的 : O(mn) OR O((m^2)/n)?

java - 在整数数组中找到最小值最大值,性能问题

java - 如何在List/ArrayList中查找出现

php - 计算对象数组的列中某个值的出现次数

algorithm - 问题 : Bob's Sale

使用递归计算更大数组中子数组的出现次数

r - 在 r 中同时(并行)在后台运行多个作业

r - 如何从R中的预测中提取预测?

r - R中矩阵中具有可变列数的减法

R 合并日期和时间列,但将今天的日期混入