2010-01-12 95 views
1

我想按列替換R數據幀中的值。我想通過數據幀的給定列表循環,並將所有「是」值替換爲1,將所有其他值替換爲0.使用循環中的變量轉換R數據幀

我嘗試使用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] =" 

我不知道這裏出了什麼問題,但問題必須與變量substi有關形式予以。

回答

7

的代碼實際上可以簡化爲一個無環路或短線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 
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))