在R中为cut函数添加标签

5

以下是一个数据框示例:

df1 <- structure(list(X = 1:15, a = c(2L, 3L, 4L, 3L, 7L, 5L, NA, 2L, 
9L, 7L, 0L, 1L, 20L, 15L, 14L)), .Names = c("X", "a"), 
   class = "data.frame", row.names = c(NA, 
-15L))

我正在使用以下代码将列'a'分成四分位数:
cut.at.n.tile <- function(X , n = 4){ 
  cut( X , breaks = quantile( X , 
     probs = (0:n)/n , na.rm = TRUE ) , include.lowest = TRUE )}
df1$a.quartile <- cut.at.n.tile( df1$a , n = 4)

如何将标签替换为1-4(1表示最低)? 我不希望仅仅重新编码值,因为我将多次运行此代码,并使用不同的连续变量。

非常感谢任何帮助。

2个回答

7
使用 labels 参数来进行 cut 操作...
cut.at.n.tile <- function(X , n = 4){ 
   cut( X , breaks = quantile( X , 
      probs = (0:n)/n , na.rm = TRUE ) ,
      labels = 1:n,
      include.lowest = TRUE )}
cut.at.n.tile( df1$a , n = 4)
##  [1] 1    2    2    2    3    3    <NA> 1    4    3
##      1    1    4    4    4   
## Levels: 1 2 3 4

您可能对ggplot2::cut_number也感兴趣,它基本上会做相同的事情...

ggplot2::cut_number(df1$a, n = 4, labels = 1:4)

3
您也可以在cut fcn中将标签设置为FALSE;例如,
cut(df1$a,
    breaks = quantile( df1$a , 
                     probs = seq(0,1,.25) , na.rm = TRUE ),
    labels = F, # setting labels to false just makes labels integer codes instead of factor levels
    include.lowest = T)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接