2017-08-10 9 views
0

名前のリストがあるとします。new.var.names <- c("a", "b", "c")。そして私は、データフレームDFをしている - のは、このことを仮定しよう - 含まれているかは重要ではありません。今、私は新しい変数を追加し、リストに自分の名前、new.var.namesをベースにするrの名前リストに基づいて新しい変数に名前を効率的に割り当てる

StudyID <- c('sid124','sid66537','sid78848') 
age <- c(87, 63, 45) 
bmi <- c(24.3,19.2,23.5) 
data <- data.frame(StudyID, age, bmi) 

。私のようなものだろう:

data$NewVar <- data$bmi/data$age 

をしかし、私は、複数の新しい変数を作りたいので、単純に私はそうのようにこれらを作成します。

data$a <- data$bmi/data$age 
data$b <- data$bmi/data$age 
data$c <- data$bmi/data$age 

は明らかにこれは現実世界の私のように、効率的ではありませんリストはかなり長く、何百ものアイテムです。だから私は次のように何かをしたいと思います:

for (v in new.var.names){ 
data$v <- data$bmi/data$age 
} 

しかし、それは動作しません - 、それは変数vを作成するよう - 私が試したし、何とか私は、したがって、それはないだろうポスト:-Pを知っていました私は変数a, b, cを作成したいと思います。それにはどうしたらいいですか?

おかげで、最高の、

サンダー

答えて

2

私はあなただけでこれを行うことができますね。

更新:それは

StudyID <- c('sid124','sid66537','sid78848') 
age <- c(87, 63, 45) 
bmi <- c(24.3,19.2,23.5) 
data <- data.frame(StudyID, age, bmi) 

data$NewVar <- data$bmi/data$age 

new.var.names <- c("a", "b", "c") 

for (v in new.var.names){ 
    data[,c(v)] <- data$bmi/data$age 
} 

を作品示すために、質問からデータをコピー&ペーストをなぜ同じデータで3つの列を作成したいのかわかりませんが、理由はありますか?

+0

ああありがとうございます。ありがとう。しかし、それは動作しません。私はメッセージを受け取っています: '[< - '( '* tmp *'、、c(v)、value = cのエラー(2L、1L、1L、1L、2L、1L、1L、: 無効なサブセット'(私はまったく同じデータを作成したくない、私はちょうど現在の例として他の何かを考えることができなかった...) –

+0

あなた自身の例のデータを使用するとエラーなしで動作するはずです。 – user3640617

+0

ああ、そうですね、実際のデータで答えをテストしたが、うまくいかなかった。他の状況ではそうでないということではない。どちらの場合でも、両方の答えが他の人にとって有益かもしれない。 ! –

0

私は答えを見つけたことがあります。

for (v in 1:length(new.var.names)){ 
    print(new.var.names[v]) # these are just for debugging/sanity check 
    data[[ new.var.names[v] ]] <- data$bmi/data$age 
    print(table(data[[ new.var.names[v] ]])) # these are just for debugging/sanity check 
} 

すごいです! help @ user3640617

関連する問題