gpt4 book ai didi

r - 使用 cut2 在 Hmisc 中获得漂亮的切割(没有 [ ) 符号)

转载 作者:行者123 更新时间:2023-12-01 09:54:11 25 4
gpt4 key购买 nike

我目前正在尝试使用 Hmisc 巧妙地切割数据包,如下例所示:

dummy <- data.frame(important_variable=seq(1:1000))
require(Hmisc)
dummy$cuts <- cut2(dummy$important_variable, g = 4)

产生的切割在值方面是正确的:

  important_variable       cuts
1 1 [ 1, 251)
2 2 [ 1, 251)
3 3 [ 1, 251)
4 4 [ 1, 251)
5 5 [ 1, 251)
6 6 [ 1, 251)
> table(dummy$cuts)
[ 1, 251) [251, 501) [501, 751) [751,1000]
250 250 250 250

但是,我希望数据的呈现方式略有不同。例如代替

[ 1, 251 )

[ 251, 501 )

我更喜欢符号

1 - 250

251 - 500

由于我在多个变量上做了很多这样的工作,所以我对可轻松应用于多个变量的可重现解决方案很感兴趣。


编辑

根据评论中的讨论,解决方案必须处理更多困惑 变量,例如 x2 <- runif(100, 5.0, 7.5) .

最佳答案

我们可以使用 gsubfn 来删除括号并通过从第二组数字中减去一个来更改数字部分

 library(gsubfn)
v1 <- dummy$cuts
v1New <- gsubfn('\\[\\s*(\\d+),\\s*(\\d+)[^0-9]+', ~paste0(x, '-',
as.numeric(y)-1), as.character(v1))
table(v1New)
# 1-250 251-500 501-750 751-999
# 250 250 250 250

对于涉及小数的第二种情况,我们需要将数字与小数进行匹配,并通过将它们放在括号中来捕获这些组 (([0-9.]+), (\\d+\\.\\d+)).我们通过转换为“数字”并从中减去 0.01 (as.numeric(y)-0.01) 来更改第二组捕获组。 \\s* 表示 0 个或多个空格。空格在格式上不均匀,所以我们不得不使用它而不是 \\s+ ,它是 1 个或多个空格。

 v2New <- gsubfn('\\[\\s*([0-9.]+),(\\d+\\.\\d+).*', ~paste0(x,
'-',as.numeric(y)-0.01), as.character(v2))
table(v2New)
v2New
#5.00-5.59 5.60-6.12 6.13-6.71 6.72-7.49
# 25 25 25 25

数据

 set.seed(24)
x2 <- runif(100, 5.0, 7.5)
v2 <- cut2(x2, g=4)

关于r - 使用 cut2 在 Hmisc 中获得漂亮的切割(没有 [ ) 符号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31771810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com