Сравнение столбцов на строку в кадре данных R - PullRequest
0 голосов
/ 07 марта 2019

У меня есть датафрейм с 3 столбцами и несколькими тысячами строк.Теперь я хочу сравнить значения в столбцах каждой строки, чтобы увидеть, соответствуют ли значения определенной тенденции.

Df <- data.frame(Value1 = c(13,19,56,47,15,13,64, 48), Value2 = c(54,64,11,21,15,48,12,78), Value3 = c(66,78,05,12,21,23,45,30))

В этом примере строка данных в 1-м кадре будет иметь восходящий наклон, а строка 3 - в нисходящем.slope.

Я написал это для цикла, чтобы пройти весь фрейм данных.

for(row in 1:nrow(Df)) {
  if (Df$Value1 > Df$Value2 & Df$Value2 > Df$Value3){
    print("Downward slope")
  } else if (Df$Value1 < Df$Value2 & Df$Value2 < Df$Value3){
    print("Upward slope")
  } else if (Df$Value1 > Df$Value2 & Df$Value2 < Df$Value3){
    print("Dip")
  } else if (Df$Value1 < Df$Value2 & Df$Value2 > Df$Value3){
    print("Peak")
  }
}

Теперь это уже довольно неэффективно, но это даже не работает.При выполнении этого я получаю ошибку:

условие имеет длину> 1 и будет использоваться только первый элемент; условие имеет длину> 1 и будет использоваться только первый элемент [1] "Восходящий наклон"

условие имеет длину> 1, и будет использоваться только первый элемент, условие имеет длину> 1, и будет использоваться только первый элемент [1]" Наклон вверх "

Как бы заставить что-то подобное работать?

1 Ответ

0 голосов
/ 07 марта 2019

Вероятно, лучше использовать векторизованный ifelse, а не цикл

ifelse(Df[,1] >  Df[,2],
  ifelse(Df[,2] >  Df[,3], 'down', 'dip'),
  ifelse(Df[,2] >  Df[,3], 'peak', 'up'))
#[1] "up"   "up"   "down" "down" "up"   "peak" "dip"  "peak"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...