2010-01-12 62 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))