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,有多少次从 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/

相关文章:

r - 从 R 表的多列中选择频繁值

删除R矩阵中每列的3个最大值

algorithm - 在 QuickSort 中选择一个枢轴

c# - 查找数组中最大值的出现

r - 计算 R 中分类变量的出现次数

SED 替换了一些首次出现(和范围)的模式

R:通过 *list* 列连接两个表(tibbles)

r - 使用 ggdendrogram 创建树状图

python - 二进制搜索 : weird middle point calculation

asp.net - 如何为此 RC4 算法创建解密函数