向量的最大值或最小值,且字符串仅包含r中的数字。'的优先级;弦的';向量中的数字
我有一个包含引号中的数字的向量(所以它们实际上是字符串),我试图计算向量的最大值和最小值。例如,在向量向量的最大值或最小值,且字符串仅包含r中的数字。'的优先级;弦的';向量中的数字,r,sorting,max,min,R,Sorting,Max,Min,我有一个包含引号中的数字的向量(所以它们实际上是字符串),我试图计算向量的最大值和最小值。例如,在向量x中,您正在处理字符串 要解决您的特定问题,您可以使用taRifx软件包中提供的destring()函数 请参阅下面的代码: x <- c("5", "12", "7") install.packages("taRifx") library(taRifx) y <- destring(x) sort(y) x在您的示例中,您使用的是字符串 要解决您的特定问题,您可以使用taRifx
x中,您正在处理字符串
要解决您的特定问题,您可以使用taRifx
软件包中提供的destring()
函数
请参阅下面的代码:
x <- c("5", "12", "7")
install.packages("taRifx")
library(taRifx)
y <- destring(x)
sort(y)
x在您的示例中,您使用的是字符串
要解决您的特定问题,您可以使用taRifx
软件包中提供的destring()
函数
请参阅下面的代码:
x <- c("5", "12", "7")
install.packages("taRifx")
library(taRifx)
y <- destring(x)
sort(y)
x字符串按字母顺序排序。我们可以通过将数字字符串更改为字母字符串(0表示a,1表示b等)来验证您观察到的顺序的一致性:
x <- c("5", "12", "7")
y <- c("1","12","13","14","15","10","38","19", "60")
digit_to_letter = function(x) {
x = strsplit(x, "")
lets = lapply(x, function(d) letters[as.integer(d) + 1])
sapply(lets, paste, collapse = "")
}
如果要将数字用作数字,请使用as.numeric()
或as.integer()
将数字字符串转换为更合适的类
最后一个例子可以更好地说明:
z = as.character(c(1, 2, 10, 12, 100, 101, 121, 1000, 9))
cbind(z, digit_to_letter(z))[order(z), ]
# z
# [1,] "1" "b"
# [2,] "10" "ba"
# [3,] "100" "baa"
# [4,] "1000" "baaa"
# [5,] "101" "bab"
# [6,] "12" "bc"
# [7,] "121" "bcb"
# [8,] "2" "c"
# [9,] "9" "j"
字符串按字母顺序排序。我们可以通过将数字字符串更改为字母字符串(0表示a,1表示b等)来验证您观察到的顺序的一致性:
x <- c("5", "12", "7")
y <- c("1","12","13","14","15","10","38","19", "60")
digit_to_letter = function(x) {
x = strsplit(x, "")
lets = lapply(x, function(d) letters[as.integer(d) + 1])
sapply(lets, paste, collapse = "")
}
如果要将数字用作数字,请使用as.numeric()
或as.integer()
将数字字符串转换为更合适的类
最后一个例子可以更好地说明:
z = as.character(c(1, 2, 10, 12, 100, 101, 121, 1000, 9))
cbind(z, digit_to_letter(z))[order(z), ]
# z
# [1,] "1" "b"
# [2,] "10" "ba"
# [3,] "100" "baa"
# [4,] "1000" "baaa"
# [5,] "101" "bab"
# [6,] "12" "bc"
# [7,] "121" "bcb"
# [8,] "2" "c"
# [9,] "9" "j"
排序字符串时,R从字符串的第一个字符开始,然后使用后面的字符来断开连接(如果需要)。“12”以“1”开头,因此排序低于“5”或“7”。如果要将数字视为数字,请使用数值数据类型。如果你把它们作为字符串,它们将按字母顺序排序/比较。我想你很清楚发生了什么。一种解决方案(如果您真的想将它们保留为字符串)是填充,例如:sort(sprintf(“%*s”,max(nchar(x)),x))
。您还可以签出stringr::str_pad()
。对字符串进行排序时,R从字符串的第一个字符开始,然后在需要时使用后面的字符断开连接。“12”以“1”开头,因此排序低于“5”或“7”。如果要将数字视为数字,请使用数值数据类型。如果你把它们作为字符串,它们将按字母顺序排序/比较。我想你很清楚发生了什么。一种解决方案(如果您真的想将它们保留为字符串)是填充,例如:sort(sprintf(“%*s”,max(nchar(x)),x))
。您还可以查看stringr::str_pad()
min
和max
按字母顺序给出向量的第一个和最后一个元素,而不是第一个和最后一个元素。如果您将其与内置选项(如as.numeric
或(在OP的例子中)甚至as.integer
进行比较,那么推荐taRifx::destring
将更有吸引力。destring
做了什么,使这些更简单、无依赖性的函数做不到?我同意。我只是习惯了命令和包,因为我经常使用它。是的,你让我有点困惑@DataSharkie。但现在清楚了。谢谢我只是在使用软件包的其他功能,并且习惯了使用destring()
函数@rev_teshWelcome to SO@DataSharkie,我编辑了你的帖子来帮助改进它。min
和max
给出按字母顺序排列的第一个和最后一个元素,而不是向量的第一个和最后一个元素。如果您将其与内置选项(如as.numeric
或(在OP的例子中)甚至as.integer
进行比较,那么推荐taRifx::destring
将更有吸引力。destring
做了什么,使这些更简单、无依赖性的函数做不到?我同意。我只是习惯了命令和包,因为我经常使用它。是的,你让我有点困惑@DataSharkie。但现在清楚了。谢谢我只是在使用软件包的其他功能,并习惯于使用destring()
函数@rev_teshWelcome to SO@DataSharkie,我对您的帖子进行了一些编辑以帮助改进。