R应用返回的行但需要列

时间:2015-12-26 16:41:16

标签: r dataframe

我正在尝试清理调查数据,其中有时会在小时字段中输入分钟信息。如果缺少分钟或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

我做错了什么?

1 个答案:

答案 0 :(得分:3)

您正在跨行执行正确的应用。您只需转置输出。

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

这是因为apply返回函数产生的列,无论您的边距是行还是列。因此,要从行到行,必须进行转置。