R применяет возвращаемые строки, но хочет столбцы

Я пытаюсь очистить данные опроса, где иногда информация о минутах вводится в поле часов. В правилах очистки указано переместить значение часов в поле минут, если минуты отсутствуют или равны 0, а часы равны 15, 30, 45 или 60.

Вот функция, которую я написал:

cleanHrMin <- function(x){
  h = x[1]
  m = x[2]
  if ( !is.na(h) && (h==15 || h==30 || h==45 || h==60) && (m==0 || is.na(m)) )
    { return(c(0,h)) }
  else
    { return(x) }
}

С тестовыми данными:

df <- as.data.frame(cbind(hrs = c(1,15,0), mins = c(10,NA,15)))

Я запускаю функцию следующим образом:

as.data.frame(apply(df,1,cleanHrMin))

и получить вывод:

  V1 V2 V3
1  1  0  0
2 10 15 15

Но я хочу:

  V1 V2
1  1 10
2  0 15
3  0 15

Что я делаю не так?


person JenB    schedule 26.12.2015    source источник


Ответы (1)


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

> as.data.frame(t(apply(df,1,cleanHrMin)))
  V1 V2
1  1 10
2  0 15
3  0 15

Это связано с тем, что apply возвращает столбцы, полученные в результате функции, независимо от того, находится ли ваше поле над строками или над столбцами. Итак, чтобы перейти от строки к строке, вы должны транспонировать.

person Matthew Lundberg    schedule 26.12.2015