我正在尝试按列替换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] ="
我不知道这里出了什么问题,但问题必须与变量替换有关。
答案 0 :(得分: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 :(得分: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))