簡體   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