我正在努力以干燥的方式创建多个列 我搜索了谷歌和堆栈交换,我仍在努力与下面。
df <- data.frame(red = 1:10, blue=seq(1,30,3))
myfunction <- function(x){
log(x) + 10
}
df$green <- myfunction(df$red)
df$yellow <- myfunction(df$blue)
我的问题是:
如何使用for循环创建绿色和黄色列?
如何使用apply函数创建绿色和黄色?
答案 0 :(得分:1)
我花了一些时间研究这些事情。大多数情况下,您要么知道新变量的所有名称,要么让它们以有序模式工作,这样您就可以将名称与索引变量粘贴在一起。
df <- data.frame(red = 1:10, blue=seq(1,30,3))
myfunction <- function(x){
log(x) + 10
}
newcols = apply(X = df, MARGIN = 2, FUN = myfunction)
colnames(newcols) = c("greeen","yellow")
df = cbind(df,newcols)
# Alternative
df <- data.frame(red = 1:10, blue=seq(1,30,3))
colors = c("green", "yellow")
for(i in 1:length(colors)){
df[,colors[i]] = myfunction(df[,i])
}
答案 1 :(得分:0)
正如Sotos所指出的那样,申请要比lapply慢。所以我认为最佳解决方案是:
sudo pkill -9 python