令人讨厌地给出列表结果列表

时间:2018-11-26 18:56:22

标签: r lapply

当我尝试将函数应用于列时遇到一些问题。我以为我做的一切都正确,但这给了我一些疯狂的结果。这是代码:

df <- data.frame(replicate(10,sample(0:10,10,rep=TRUE)))

dummy_fn <-function(col_name){
  if (col_name>5){
    return(1)
  }
  else{
    return(0)
  }
}


df$X11<-lapply(df$X1, dummy_fn)

summary(df$X11)

这是我得到的结果: results

如何使结果恰好是0和1的整数?

2 个答案:

答案 0 :(得分:0)

我们不需要lapply

dummy_fn <- function(data, columnName) {
           as.integer(data[[columnName]] > 5)
 }

df$X11 <- dummy_fn(df, 'X1')

答案 1 :(得分:0)

尝试不公开。 df$X11 <- unlist(lapply(df$X1, dummy_fn))

编辑:

lapply返回一个列表。您可以按照上述步骤使用unlistlapply个结果,这将起作用。

或者,您可以改用sapplysapply简化了lapply并返回向量或矩阵。基本上,它将尽可能取消列出结果。否则,它将返回一个列表(其行为与lapply相同)。请谨慎使用,并仔细检查返回结果的类。

在这种情况下,它可以简化结果

df$X11<-sapply(df$X1, dummy_fn) #Use sapply

summary(df$X11)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   0.00    0.25    1.00    0.70    1.00    1.00