【问题标题】:Categorising values in one column and printing them in a new column in R在一列中对值进行分类并将它们打印在 R 中的新列中
【发布时间】:2018-02-05 10:12:50
【问题描述】:

我正在尝试根据与其他列(在本例中为 ColA、ColB、ColC)的比较方式对列(值)中的值进行分类 值的类别应写在“类别”列下的相应行中。

以下是数据框的示例

Value   ColA    ColB    ColC    Category
0.8     0.3     0.7     1.1 
0.1     0.2     0.7     1.3 
0.7     0.5     0.8     1.0 

这基本上是我想说的伪代码:

if ( Value >= 0 && Value <= ColA {
    print("Bottom") in Category
}
else if(Value > ColA && Value <= ColB){
    print("Middle") in Category
}
else if(Value > ColB && Value <= ColC){
    print("Top") in Category
}
else(){
}

不过,我刚刚开始学习 R,并且在语法上苦苦挣扎。这在 R 中是如何实现的?

【问题讨论】:

  • 您可以使用ifelse 代替if/elsewith(df1, ifelse(Value &gt;= 0 &amp; Value &lt;= ColA, "Bottom", ...

标签: r categories calculated-columns


【解决方案1】:

导入您的数据:

df <- read.table(text = "
                 Value   ColA    ColB    ColC
                 0.8     0.3     0.7     1.1 
                 0.1     0.2     0.7     1.3 
                 0.7     0.5     0.8     1.0", header = T)

现在我们可以使用一组嵌套的ifelse-statements:

df$Category <-
  ifelse(df$Value >= 0 & df$Value <= df$ColA, "Bottom",
    ifelse(df$Value > df$ColA & df$Value <= df$ColB, "Middle",
      ifelse(df$Value > df$ColB & df$Value <= df$ColC, "Top", NA)
    )
  )

输出:

> df
  Value ColA ColB ColC Category
1   0.8  0.3  0.7  1.1      Top
2   0.1  0.2  0.7  1.3   Bottom
3   0.7  0.5  0.8  1.0   Middle

来自?ifelse

ifelse 返回一个与 test 具有相同形状的值,其中填充有从是或否中选择的元素,具体取决于 test 的元素是 TRUE 还是 FALSE。

ifelse(test, yes, no)

另一种更易读的解决方案:

df$Category <- NA

df$Category[df$Value >= 0 & df$Value <= df$ColA] <- "Bottom"
df$Category[df$Value > df$ColA & df$Value <= df$ColB] <- "Middle"
df$Category[df$Value > df$ColB & df$Value <= df$ColC] <- "Top"

> df
  Value ColA ColB ColC Category
1   0.8  0.3  0.7  1.1      Top
2   0.1  0.2  0.7  1.3   Bottom
3   0.7  0.5  0.8  1.0   Middle

【讨论】:

  • 这很有帮助——感谢您完成这些步骤并展示替代解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 2020-06-12
  • 2019-07-05
  • 2019-01-14
  • 2018-09-19
相关资源
最近更新 更多