[英]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.