繁体   English   中英

将字符串列值转换为数字并在 R 中的这些数字值中找到最大值

[英]convert string column values to numeric and find maximum in those numeric values in R

我在数据框中有一列名为“XYZ”(XYZ 是我的数据框中的列之一),这个“XYZ”列是字符串类型。 “XYZ”列的值如下所示

例子:

   XYZ
new_value_1
new_value_2
new_value_4
new_value_3

我必须得到最后一位数字(这是一个数字)并将其转换为数字并找到这些数字中的最大值。 在该列中找到最大数后,我需要从该最大数到 n 行生成一个序列。

例如,从上面的“XYZ”中,每个字符串的末尾都有数字,我必须得到最后一位数字,并在这些数字中找到最大值,在这种情况下,找到最大值后最大值为 4 我必须改变 id 列和 id将从下一个数字开始到最大数字。

输出:

 XYZ             ID
new_value_1      5
new_value_2      6
new_value_4      7
new_value_3      8

将来,请使用 dput 制作一个可重现的输入数据集。 为方便起见,我重新创建了数据集。

使用dplyr包轻松:

library(dplyr)
raw_data <- data.frame("XYZ"= c("new_value_1","new_value_2","new_value_3","new_value_4"))

##get the max value
max_value <- max(sapply(raw_data$XYZ, function(x){as.numeric(strsplit(x, "_")[[1]][3])}))

#make the resulting data

final_data <- raw_data %>% mutate(ID = (max_value+1):(max_value+nrow(raw_data)))

如果不允许使用 dplyr,请告诉我。

这是一个基本的R方式。 它使用正则表达式来提取最后一位或多位数字,并使用seq.int创建一个类似于问题中的序列的序列。

m <- max(as.integer(sub("^[^[:digit:]]*([[:digit:]]+$)", "\\1", df1$XYZ)))
df1$ID <- m + seq.int(nrow(df1))

df1
#          XYZ ID
#1 new_value_1  5
#2 new_value_2  6
#3 new_value_4  7
#4 new_value_3  8

数据

df1 <- read.table(text = "
   XYZ
new_value_1
new_value_2
new_value_4
new_value_3
", header = TRUE)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM