【问题标题】:Transform R dataframes using variables in loop使用循环中的变量转换 R 数据帧
【发布时间】:2025-12-31 03:05:06
【问题描述】:

我正在尝试按列替换 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] ="

我不知道这里出了什么问题,但问题必须与变量替换有关。

【问题讨论】:

    标签: r loops conditional dataframe


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      模拟数据:

      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))
      

      【讨论】: