【问题标题】:Add a column to dataframe in R, based on greater than or less than condition in previous columns根据先前列中的大于或小于条件,将列添加到 R 中的数据框
【发布时间】:2014-02-21 15:50:53
【问题描述】:

一个非常基本的问题。我有一个包含 14 个变量和 576 个观察值的数据框。

>  head(Boston)
     crim zn indus chas   nox    rm  age    dis rad tax ptratio  black lstat medv
1 0.00632 18  2.31    0 0.538 6.575 65.2 4.0900   1 296    15.3 396.90  4.98 24.0
2 0.02731  0  7.07    0 0.469 6.421 78.9 4.9671   2 242    17.8 396.90  9.14 21.6
3 0.02729  0  7.07    0 0.469 7.185 61.1 4.9671   2 242    17.8 392.83  4.03 34.7
4 0.03237  0  2.18    0 0.458 6.998 45.8 6.0622   3 222    18.7 394.63  2.94 33.4
5 0.06905  0  2.18    0 0.458 7.147 54.2 6.0622   3 222    18.7 396.90  5.33 36.2
6 0.02985  0  2.18    0 0.458 6.430 58.7 6.0622   3 222    18.7 394.12  5.21 28.7
  1. 我想创建一个新列 CATMEDV,并为每条记录填充值 10。如果medv > 30.0, CATMEDV=1IF medv < 30, CATMEDV=0

  2. 如果我想添加多个条件,例如 medv>30.0rm>7 然后 CATMEDV=1, else 0。我该怎么做?

此外,每次我将数据框从 R 控制台粘贴到问题时,它都会变得混乱,并且一些版主会重新格式化它。如何在不混淆 R 格式的情况下将数据框粘贴到问题窗口中?

【问题讨论】:

  • 请不要使用head 来显示示例数据。请改用dputdump 之类的东西。 within(Boston, CATMEDV <- medv>30)
  • @mlt 谢谢。将学会使用它。

标签: r dataframe conditional-statements calculated-columns


【解决方案1】:

你可以使用函数ifelse

x <- data.frame(medv=rnorm(10, mean=30), rm=rnorm(10, mean=7))
x$CATMEDV <- ifelse(x$medv>30.0 & x$rm>7, 1, 0)
x
       medv       rm CATMEDV
1  30.59482 8.139964       1
2  29.64808 6.565482       0
3  30.99625 5.875143       0
4  31.46609 7.848523       1
5  29.65703 7.875010       0
6  29.47165 7.023216       0
7  28.26122 8.046844       0
8  31.62395 6.007356       0
9  32.10948 7.423388       1
10 29.53155 6.098616       0

【讨论】:

  • 谢谢!我试图不必要地使用转换!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多