1

R データフレームの値を列ごとに置き換えようとしています。データフレームの特定の列のリストをループして、すべての「はい」の値を 1 に置き換え、他のすべての値を 0 に置き換えたいと思います。

次のようなもので transform() および ifelse() 関数を使用してこれを実行しようとしました:

# List of selected Columns:
ColumnNames = c("Frigori", "Microond" , "Arca", "Aspira")

# Replace Values in dataframe
for(i in 1:length(ColumnNames)){
dataframe <- transform(dataframe, ColumnNames[i] = ifelse(Columnames[i] == "Yes", 1, 0))
}

このコードは、ループ外の明示的な列名では正常に機能しますが、配列では次のエラーが発生します。

Error: unexpected '=' in:
"for(i in 1:length(Appliances)){
dataframe <- transform(dataframe, ColumnNames[i] ="

ここで何がうまくいかないのかわかりませんが、問題は変数の置換に関連している必要があります。

4

2 に答える 2

7

コードは実際には、ループなし、またはループなしの 1 つの短い行に単純化できますapply()

dataframe <- data.frame(a = c("No", "Yes", "No", "No", "Yes"),
                        b = c("Hi", "Hi", "Mom", "Hi", "Mom"),
                        c = c("Yes", "Yes", "Yes", "Yes", "No"))
cols <- c("a","c")
dataframe[,cols] <- as.numeric(dataframe[,cols]=="Yes")
dataframe

  a   b c
1 0  Hi 1
2 1  Hi 1
3 0 Mom 1
4 0  Hi 1
5 1 Mom 0
于 2010-01-12T22:31:14.450 に答える
1

シミュレートされたデータ:

data <- data.frame(matrix(ifelse(runif(40)>.5,"YES",letters[1:26]), 10, 4))

列 X2 と X4 を変更するとします。

cols <- c("X2","X4")
data[,cols] <- apply(data[cols],2,function(x) ifelse(x=="YES",1,0))
于 2010-01-20T10:01:35.037 に答える