如何在R中的切割函数中放置多个断点?

如何在R中的切割函数中放置多个断点?,r,function,multiple-columns,cut,R,Function,Multiple Columns,Cut,我有3列,我想根据每个列的3个不同的分隔符(如示例中所示)设置标签,但我不知道如何设置,因为我可以为同一分隔符的多个列设置标签,但不能为不同的分隔符(br1、br2、br3)设置标签 var您可以使用Map: Map(function(x, y, labels=1:9) cut(x, y, labels = labels), df[, 2:4], list(br1, br2, br3)) 输出是df列的列表。可以使用as.data.frame将其转换为数据帧。您还可以将其他参数添加到cut(例

我有3列,我想根据每个列的3个不同的分隔符(如示例中所示)设置标签,但我不知道如何设置,因为我可以为同一分隔符的多个列设置标签,但不能为不同的分隔符(br1、br2、br3)设置标签


var您可以使用
Map

Map(function(x, y, labels=1:9) cut(x, y, labels = labels), df[, 2:4], list(br1, br2, br3))
输出是
df
列的列表。可以使用
as.data.frame
将其转换为数据帧。您还可以将其他参数添加到
cut
(例如,
include_lowest
)。提供的间隔之外的值为
NA
s

# OUTPUT
$x1
 [1] 6    8    <NA> 8    9    4    5    <NA> 6    8   
Levels: 1 2 3 4 5 6 7 8 9

$x2
 [1] 8 6 6 5 3 7 8 6 9 8
Levels: 1 2 3 4 5 6 7 8 9

$x3
 [1] 8    9    <NA> 9    9    9    <NA> 9    8    8   
Levels: 1 2 3 4 5 6 7 8 9
#输出
$x1
[1] 6    8     8    9    4    5     6    8   
级别:123456789
$x2
[1] 8 6 6 5 3 7 8 6 9 8
级别:123456789
$x3
[1] 8    9     9    9    9     9    8    8   
级别:123456789
数据

set.seed(123)
var <- 1:10

x1 <- rnorm(10, mean=100, sd=25)
x2 <- rnorm(10, mean=100, sd=25)
x3 <- rnorm(10, mean=100, sd=25)
df <- data.frame(var,x1,x2,x3)

#With 1 break for all the columns
br1 <-c(50,60,70,80,90,100,110,120,130,140)
br2 <-c(30,40,45,55,61,70,98,105,115,138)
br3<-c(20,25,30,35,38,42,45,70,95,132)
set.seed(123)

var考虑使用
get()
cut
值指定为带有
for
循环的新列,以使用列后缀中的变量名称:

set.seed(1082019)
#...

for(b in c("br1", "br2", "br3")) 
    df[paste0(names(df)[2:4], "_", b)] <- lapply(df[, 2:4], cut, br=get(b), labels=c(1:9))

df

#    var        x1        x2        x3 x1_br1 x2_br1 x3_br1 x1_br2 x2_br2 x3_br2 x1_br3 x2_br3 x3_br3
# 1    1 121.95508  98.40327 139.31413      8      5      9      9      7   <NA>      9      9   <NA>
# 2    2 105.28775 116.99844  83.12366      6      7      4      8      9      6      9      9      8
# 3    3  80.17226 118.92694 104.57693      4      7      6      6      9      7      8      9      9
# 4    4 146.94335  90.50056  58.35752   <NA>      5      1   <NA>      6      4   <NA>      8      7
# 5    5  98.15953  23.58072  86.67441      5   <NA>      4      7   <NA>      6      9      1      8
# 6    6 137.52613  74.83507  95.49531      9      3      5      9      6      6   <NA>      8      9
# 7    7  51.41213 141.01571  68.36462      1   <NA>      2      3   <NA>      5      7   <NA>      7
# 8    8  74.05926 134.66125  93.40060      3      9      5      6      9      6      8   <NA>      8
# 9    9  63.16221  52.25081  76.96090      2      1      3      5      3      6      7      7      8
# 10  10 123.96491  73.03856 138.41414      8      3      9      9      6   <NA>      9      8   <NA>
set.seed(1082019)
#...
对于(c中的b(“br1”、“br2”、“br3”))

df[paste0(names(df)[2:4],“u”,b)]我的答案有帮助吗?@slava kohut你的答案帮助了我,现在我很容易继续我的工作。谢谢。考虑一下投票或接受Tististo,Muthas Gracias!
set.seed(123)
var <- 1:10

x1 <- rnorm(10, mean=100, sd=25)
x2 <- rnorm(10, mean=100, sd=25)
x3 <- rnorm(10, mean=100, sd=25)
df <- data.frame(var,x1,x2,x3)

#With 1 break for all the columns
br1 <-c(50,60,70,80,90,100,110,120,130,140)
br2 <-c(30,40,45,55,61,70,98,105,115,138)
br3<-c(20,25,30,35,38,42,45,70,95,132)
set.seed(1082019)
#...

for(b in c("br1", "br2", "br3")) 
    df[paste0(names(df)[2:4], "_", b)] <- lapply(df[, 2:4], cut, br=get(b), labels=c(1:9))

df

#    var        x1        x2        x3 x1_br1 x2_br1 x3_br1 x1_br2 x2_br2 x3_br2 x1_br3 x2_br3 x3_br3
# 1    1 121.95508  98.40327 139.31413      8      5      9      9      7   <NA>      9      9   <NA>
# 2    2 105.28775 116.99844  83.12366      6      7      4      8      9      6      9      9      8
# 3    3  80.17226 118.92694 104.57693      4      7      6      6      9      7      8      9      9
# 4    4 146.94335  90.50056  58.35752   <NA>      5      1   <NA>      6      4   <NA>      8      7
# 5    5  98.15953  23.58072  86.67441      5   <NA>      4      7   <NA>      6      9      1      8
# 6    6 137.52613  74.83507  95.49531      9      3      5      9      6      6   <NA>      8      9
# 7    7  51.41213 141.01571  68.36462      1   <NA>      2      3   <NA>      5      7   <NA>      7
# 8    8  74.05926 134.66125  93.40060      3      9      5      6      9      6      8   <NA>      8
# 9    9  63.16221  52.25081  76.96090      2      1      3      5      3      6      7      7      8
# 10  10 123.96491  73.03856 138.41414      8      3      9      9      6   <NA>      9      8   <NA>