gpt4 book ai didi

r - 将字符串分成3列 : text, 数字、文本

转载 作者:行者123 更新时间:2023-12-01 12:20:34 25 4
gpt4 key购买 nike

我正在处理一个大型数据集(约 1500 行),当我构建数据集时,我没有提前考虑分离标识符,所以它们被集中到一个长字符串中。

标识字符串位于标记为“Polygon_Name”的列中。我想保留此列,并将此列中的字符串值拆分为 3 个附加列。

例如,如果任何“Polygon_Name”单元格中嵌入了一个数字,例如 Canker14B,我希望以下列结束:(1) 原始 Polygon_Name,(2) 之前的所有文本数字,(3) 数字,(4) 数字后的所有文本。

我的一小部分数据:

df <- structure(list(Bolt_ID = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L), .Label = "N1T.3.4.15.0.C", class = "factor"),
Polygon_Name = structure(c(10L, 1L, 9L, 6L, 3L, 7L, 2L, 8L,
4L, 5L), .Label = c("C", "Canker15B", "Canker15Left", "Canker15Right",
"Canker16", "Canker17", "CankS15B", "CankS16", "CankS17",
"S"), class = "factor"), Measure = c(19.342, 25.962, 0.408,
0.008, 0.074, 0.41, 0.011, 0.251, 0.056, 0.034)), .Names = c("Bolt_ID",
"Polygon_Name", "Measure"), row.names = c(1L, 2L, 4L, 5L, 6L,
7L, 8L, 9L, 10L, 11L), class = "data.frame")

当前输出:

enter image description here

最终输出(我手动构建的):

enter image description here

我已经想出如何使用以下代码提取数字:

library(stringr)
regexp <- "[[:digit:]]+"
df$Poly_Num <- str_extract(df$Polygon_Name, regexp)

但我仍在努力提取数字前后的文字。如有任何想法,我们将不胜感激。

最佳答案

tidyverse 的想法是,

library(tidyverse)

df %>%
mutate(Poly_num = gsub('\\D+', '', Polygon_Name)) %>%
separate(Polygon_Name, into = c('Poly_type', 'Poly_letter'), sep = '[0-9]+', remove = FALSE)

# Bolt_ID Polygon_Name Poly_type Poly_letter Measure Poly_num
#1 N1T.3.4.15.0.C S S <NA> 19.342
#2 N1T.3.4.15.0.C C C <NA> 25.962
#3 N1T.3.4.15.0.C CankS17 CankS 0.408 17
#4 N1T.3.4.15.0.C Canker17 Canker 0.008 17
#5 N1T.3.4.15.0.C Canker15Left Canker Left 0.074 15
#6 N1T.3.4.15.0.C CankS15B CankS B 0.410 15
#7 N1T.3.4.15.0.C Canker15B Canker B 0.011 15
#8 N1T.3.4.15.0.C CankS16 CankS 0.251 16
#9 N1T.3.4.15.0.C Canker15Right Canker Right 0.056 15
#10 N1T.3.4.15.0.C Canker16 Canker 0.034 16

一种方法是使用 tidyr 中的extract(@docendodiscimus 的赞美)

tidyr::extract(df, Polygon_Name, c("a","b","c"), "^([^0-9]+)(\\d*)([^0-9]*)$", 
remove = FALSE, convert = TRUE)

关于r - 将字符串分成3列 : text, 数字、文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44548450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com