2017-07-06 55 views
0

我很努力地以乾式創建多列。
我已經搜索谷歌和堆棧交換,我仍然在下面掙扎。如何使用循環創建多列

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循環的綠色和黃色列?
如何使用應用函數創建綠色和黃色?

+0

'lapply'將是標準的做法對於 –

回答

0

正如Sotos指出的那樣,應用比lapply慢。所以,我認爲最佳的解決方案是:

df[,c("green","yellow")] <- lapply(df, myfunction) 
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]) 
} 
+0

這是最好不要使用'apply'上data.frames。通常的操作是'sapply'或'lapply' – Sotos

+0

我經常使用所有這些。爲什麼你提到這個@Sotos – svenhalvorson

+0

因爲'apply'會強制矩陣 – Sotos