2016-08-26 5 views
0

のループを介して新しい変数を作成する1から構成構成されるデータセットである)黒ガラス玉の数白い大理石の2)数及び3)総大理石ここでR

white<- c(5, 6,3,5, 9) 
black<- c(1, 3,7,5,2) 
total<- c(6,9,10,10,11) 
data<- data.frame(white, black, total) 

私がしたい場合2つの新しい変数perwhiteを作成するループを作成します。これは、白/全体と黒/全体であるperblackです。何をする必要がありますか?ここで

は私が、私は、データセット内の新しい列を作成しようとしていますとき、現在の構文に問題があると考え、これまで

variables<- list("white","black") 
newnames<- list("perwhite", "perblack") 
for (i in 1:2) { 
    data$newnames[i]<- data[,variables[[i]]]/data$total 
} 

を試してみたものです。

ありがとうございました!

+0

'transform(data、x = white/total、y = black/total)'は片道です。プログラムでそれを行うには、ええ、ループは大丈夫です。 '' data [、unlist(newnames)] ' - lapply(variables、function(x)data [[x]]/data $ total) 2つのオブジェクトを定義するために、リスト()を使用します。 – Frank

+0

本当の問題は 'x $ y [i] <-'が有効な構文ではないことです。 '$'の右側には、裸の名前だけを文字列として含めることができます。 – Frank

答えて

1
for(i in setdiff(names(data), "total")) 
    data[paste0("per", i)] <- data[i]/data["total"] 

注:それは組み込み関数のいずれかの名前だから、私は、変数名としてdataを使用して警戒でしょう。