如何解决使用R从字符中提取行,文本和数字
需要从文本中提取数据(这只是一个示例)
text <- c(" 9 A 1427107 -"," 99 (B) 3997915 -"," 999 (SOCIO) 7161315 -"," 9999 @M 4035115 -"," 99999 01 Z 2136481035115 8,621"
)
到目前为止,我尝试过但无法为所有列创建模式
as.numeric(gsub("([0-9]+).*$","\\1",text))
我希望我的数据框看起来像
row_names Text ID Amount
9 A 1427107 -
99 (B) 3997915 -
999 (SOCIO) 7161315 -
9999 @M 4035115 -
99999 01 Z 2136481035115 8,621
行名是所有数字,“文本”包含数字和文本 ID列包含7到13位数字, 金额可以是“-”,也可以是带有数千个(,)的数字
解决方法
我们可以使用read.table
将数据读入data.frame
df1 <- read.table(text = text,header = FALSE,fill = TRUE)
或使用extract
library(tibble)
library(tidyr)
tibble(col1 = trimws(text)) %>%
extract(col1,into = c('rn','Text','ID','Amount'),'^(\\d+)\\s+(.*)\\s+(\\d+)\\s+([-0-9,]+)',convert = TRUE)
,
在基数R中,我们可以使用strcapture
并提供要提取的数据的模式和类型。
strcapture('\\s+(\\d+)\\s(.*?)\\s+(\\d+)\\s(.*)',text,proto=list(row_names=integer(),Text=character(),ID = numeric(),Amount = character()))
# row_names Text ID Amount
#1 9 A 1427107 -
#2 99 (B) 3997915 -
#3 999 (SOCIO) 7161315 -
#4 9999 @M 4035115 -
#5 99999 01 Z 2136481035115 8,621
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。