2017-07-06 17 views
0

私はDRY方法で複数の列を作成するのに苦労しています。
私はGoogleとスタック交換を検索しましたが、私はまだ以下に苦労しています。ループを使って複数の列を作成する方法

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'はそれがdata.framesに' apply'を使用しない方が良いということ –

答えて

0

Sotosから指摘されているように、applyは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

のための標準的な方法だろう。通常の操作は 'sapply'または' lapply'です – Sotos

+0

私はそれらをすべて頻繁に使います。なぜ@Sotos – svenhalvorson

+0

と言いますか? 'apply'が行列 – Sotos

関連する問題