r语言 - 函数切割应用于一个列,使用从其他列中截取值



假设我有这个数据库:

Bins=10
df=data.frame(Min=c(0,10,20,30), Max=c(5,16,26,38),val=c(3,11,21,31))

我想添加另一列,其中我对一列中的值进行分类(即,列调用"value"),通过在其他两列中的值之间创建的相等大小的箱子(即,列之间的分隔符称为Min和Max)。

我想我可以使用cut函数定义为打破最小和最大列之间的序列,但它不起作用。

df$bin=cut(df$val, breaks = seq(from = df$Min, to =df$Max,length.out =Bins) ,include.lowest =TRUE)

知道如何定义函数在每行上使用的断点吗?

您可以使用mutate()dplyr包中的rowwise()

df %>% 
rowwise() %>% 
mutate(bin=cut(val, breaks = seq(from = Min, to =Max,length.out =Bins) ,include.lowest =TRUE))

输出:

Min   Max   val bin        
<dbl> <dbl> <dbl> <fct>      
1     0     5     3 (2.78,3.33]
2    10    16    11 (10.7,11.3]
3    20    26    21 (20.7,21.3]
4    30    38    31 (30.9,31.8]

如果不是bin列显示因子变量的范围,您可以这样做,使bin成为该范围的中点:

f <- function(s,e,b,val) {
x = seq(s,e,length.out = b)
max(x[x<val]) + (min(x[x>val])-max(x[x<val]))/2
}
df %>% 
rowwise() %>% 
mutate(bin=f(Min, Max, Bins, val))

输出:

Min   Max   val   bin
<dbl> <dbl> <dbl> <dbl>
1     0     5     3  3.06
2    10    16    11 11   
3    20    26    21 21   
4    30    38    31 31.3 

最新更新