对一列中的值进行分类并将其打印在R中的新列中

时间:2018-02-05 10:12:51

标签: r categories calculated-columns

我尝试根据列与其他列(在本例中为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中实现这一目标?

1 个答案:

答案 0 :(得分:2)

导入您的数据:

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语句:

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相同形状的值,该值填充了从yes或no中选择的元素,具体取决于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