用for循环替换数据框的值

时间:2019-04-24 07:14:19

标签: r loops for-loop

问题是:

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,并且仅将使用第一个元素……       任何帮助表示赞赏!

2 个答案:

答案 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
  }
}