问题是:
1)如果有一个包含5行的数据框,如下所示:
x = c(0,1,3,4,8)
y = c(3,4,6,8,9)
z = c(5,7,3,6,10)
xyz = data.frame(rbind(x,y,z))
x 0 1 3 4 8
y 3 4 6 8 9
z 5 7 3 6 10
如果要使用R中的for循环,如果它们小于每行的平均值,我想用0代替数字。例如,如果(xyz[i,] < mean(xyz[i,] )
,则:
x 0 0 0 4 8
y 0 0 6 8 9
z 0 7 0 0 10
我使用R的for循环,如下所示:
for(i in 1:3)
{
j = c(1:5)
if(xyz[i,j] < rowMeans(xyz[i,]))
xyz[i,j] = 0
}
警告消息: 1:如果if(xyz [i,j]
1,并且仅将使用第一个元素…… 任何帮助表示赞赏!
答案 0 :(得分:4)
您不需要for循环。您可以简单地做到
xyz[xyz < rowMeans(xyz)] <- 0
答案 1 :(得分:1)
您的错误是您需要遍历j和i:
for(i in 1:3){
for (j in 1:5) {
if(xyz[i,j] < rowMeans(xyz[i,]))
xyz[i,j] = 0
}
}