首页 > 解决方案 > 用 for 循环替换数据框的值

问题描述

问题是:

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: In if (xyz[i, j] < rowMeans(xyz[i, ])) xyz[i, j] = 0 : 条件长度 > 1 并且只使用第一个元素…… 任何帮助表示赞赏!

标签: rloopsfor-loop

解决方案


您不需要 for 循环。你可以简单地做,

xyz[xyz < rowMeans(xyz)] <- 0

推荐阅读