在数据框

时间:2016-03-28 11:44:04

标签: r apply

我试图在数据帧中使用apply,以避免for循环。代码循环遍历数据帧上的行,并检查单元格是否等于其相邻单元格但不等于零。 sum作为新单元格返回:

for(i in 1:100){
  same = 0
  for(j in 1:9){
  if(df[i,j]==df[i,j+1] && df[i,j]!=0)
      same = same + 1
  }
 df[i,11] = same
  }

我该如何对待这个?

1 个答案:

答案 0 :(得分:0)

我们可以通过删除第一列和最后一列来比较数据集中的相邻列,比较每个子集数据集是否不等于0,得到输出逻辑矩阵的rowSums

df1[,11] <- rowSums((df1[-1]==df1[-ncol(df1)]) & 
                    df1[-1]!=0 & df1[-ncol(df1)]!=0 )

使用OP的方法,如果我们计算'df'的第11列的结果。

identical(df1[,11], df[,11])
#[1] TRUE

数据

set.seed(24)
df1 <- as.data.frame(matrix(sample(0:9, 10*100, 
       replace=TRUE), ncol=10))
df <- copy(df1)