我试图在数据帧中使用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
}
我该如何对待这个?
答案 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)