Заменить значения информационного кадра на цикл for - PullRequest
1 голос
/ 24 апреля 2019

Вопрос:

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

Я хочу заменить числа на 0, если они меньше среднего значения для каждой строки, используемой для цикла в R. Например, если (xyz[i,] < mean(xyz[i,] ), тогда:

x  0  0  0  4  8
y  0  0  6  8  9
z  0  7  0  0 10

Я использую цикл for R следующим образом:

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 ]

4 голосов
/ 24 апреля 2019

Вам не нужен цикл for.Вы можете просто сделать,

xyz[xyz < rowMeans(xyz)] <- 0
1 голос
/ 24 апреля 2019

Ваша ошибка в том, что вам нужно перебрать j и i:

for(i in 1:3){
  for (j in 1:5) {
    if(xyz[i,j] < rowMeans(xyz[i,]))
    xyz[i,j] = 0
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...