Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向量的最大值或最小值,且字符串仅包含r中的数字。'的优先级;弦的';向量中的数字_R_Sorting_Max_Min - Fatal编程技术网

向量的最大值或最小值,且字符串仅包含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,我对您的帖子进行了一些编辑以帮助改进。