gpt4 book ai didi

r - 统一使用字符串中的单双位数

转载 作者:行者123 更新时间:2023-12-04 12:05:23 25 4
gpt4 key购买 nike

我有一个非常大的 data.table,其中(大量)项目由字符串定义,包括文本和数字。

library(data.table)    
dd <- data.table(x = c("A4","A4","A4","A14","A14","A14","B4","B4","B4"),y = c("A4","A14","B4","A4","A14","B4","A4","A14","B4"), z = c(1,2,3,4,5,6,7,8,9))

x y z
A4 A4 1
A4 A14 2
A4 B4 3
A14 A4 4
A14 A14 5
A14 B4 6
B4 A4 7
B4 A14 8
B4 B4 9

数字可以是一位数或两位数 因此 R 将始终根据数字中的第一个数字(A4 之前的 A14)对它们进行排序。 Mixedsort 可以解决这个问题。但是,当我将长数据 reshape 为宽时
wide <- dcast(dd, x ~ y, value.var = "z")

R 正在根据基本排序规则再次应用排序。
x    A14  A4  B4
A14 5 4 6
A4 2 1 3
B4 8 7 9

然而,我需要以下矩阵计算的原始顺序。是否有任何有效的方法可以将字符串 + 个位数重命名为字符串 + 双位数(A4 -> A04)或我错过的另一种方法?

最佳答案

另一个可能是最简单的选项是使用 mixedorder来自 gtools -包裹:

wide <- dcast(dd, x ~ y, value.var = "z")[gtools::mixedorder(x)]

这使:

> wide
x A14 A4 B4
1: A4 2 1 3
2: A14 5 4 6
3: B4 8 7 9


如果您还想以相同的方式设置列顺序,您可以另外使用 setcolorder :
setcolorder(wide, c(1, gtools::mixedorder(names(wide)[-1]) + 1))

然后给出:

> wide
x A4 A14 B4
1: A4 1 2 3
2: A14 4 5 6
3: B4 7 8 9

关于r - 统一使用字符串中的单双位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51106764/

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