当我尝试将函数应用于列时遇到一些问题。我以为我做的一切都正确,但这给了我一些疯狂的结果。这是代码:
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)
这是我得到的结果:
如何使结果恰好是0和1的整数?
答案 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
返回一个列表。您可以按照上述步骤使用unlist
后lapply
个结果,这将起作用。
或者,您可以改用sapply
。 sapply
简化了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