【问题标题】:Changing values in one column based on another in R根据 R 中的另一列更改一列中的值
【发布时间】:2017-05-31 16:33:32
【问题描述】:

所以我正在使用 R 并尝试通过比较两列来更改一列中数据框中的值。我有类似的东西

Median   MyPrice
10       0
20       18
20       20
30       35
15       NA

我想说一些类似的话

if(MyPrice == 0 & MyPrice < Median){MyPrice <- 1
  }else if (MyPrice == Median){MyPrice <- 2
  }else if (MyPrice > Median){MyPrice <- 3
  }else {MyPrice <- 4}

想出办法

Median   MyPrice
10       1
20       1
20       2
30       3
15       4

但总是有错误。我也尝试过类似

for(i in MyPrice){if(MyPrice == 0 & MyPrice < Median){MyPrice <- 1
  }else if (MyPrice == Median){MyPrice <- 2
  }else if (MyPrice > Median){MyPrice <- 3
  }else {MyPrice <- 4}
  }

for 循环运行,但它将 MyPrice 中的所有值更改为 4。我也尝试了 ifelse() 函数,但它似乎有一个问题,一次接受这么多参数。

如果这样的解决方案更简单,我也不反对将新列添加到数据框的末尾。

【问题讨论】:

  • 如果你的数据结构不是DataFrame这是正常的
  • 您可以使用[ 运算符访问数据框中的特定元素。试试这个:my_data$MyPrice[my_data$MyPrice &lt; my_data$Median &amp; my_data$MyPrice == 0] &lt;- 1

标签: r


【解决方案1】:

鉴于您的第一个论点,如果 MyPrice == 0 &amp; MyPrice &lt; Median,您的第二行中位数:20 和 MyPrice:18 也应该是 4。这是一个工作嵌套的 ifelse 语句,后面有一个 NA 处理程序。

df <- as.data.frame(matrix(c(10,0,20,18,20,20,30,35,15,NA), byrow = T, ncol = 2))
colnames(df) <- c("Median","MyPrice")

df$NewPrice <- ifelse(df$MyPrice == 0 & df$MyPrice < df$Median, 1, 
                      ifelse(df$MyPrice == df$Median, 2, 
                             ifelse(df$MyPrice > df$Median, 3, 4)))
df$NewPrice[is.na(df$MyPrice)] <- 4
df
#  Median MyPrice NewPrice
#1     10       0        1
#2     20      18        4
#3     20      20        2
#4     30      35        3
#5     15      NA        4

【讨论】:

    【解决方案2】:

    您不一定必须使用for 循环。首先将每个比较设置为 4。

    > x$Comp=4
    > x$Comp[x$Median>x$MyPrice]=1 #if Median is higher, comparison = 1
    > x$Comp[x$Median==x$MyPrice]=2 #if Median is equal to MyPrice, comparison = 2
    > x$Comp[x$Median<x$MyPrice]=3 #if Median is lower, comparison = 3
    > x
      Median MyPrice Comp
    1     10       0    1
    2     20      18    1
    3     20      20    2
    4     30      35    3
    5     15      NA    4
    

    【讨论】:

      【解决方案3】:

      如何设置一个所有值都为 4 的新变量,然后替换您的条件适用的那些情况? 简单、直接且易于阅读:-)

      #(以@Evans Friedland 为例) df

      df df$Median , 3)

      df$myNewPrice

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-24
        • 1970-01-01
        • 2018-04-15
        • 1970-01-01
        • 1970-01-01
        • 2021-09-05
        • 1970-01-01
        • 2019-04-04
        相关资源
        最近更新 更多