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