清理 R data.table 中的字符串和数字列
Cleaning string and number columns in an R data.table
我尝试清理一个 data.frame,其中有包含文本和数字的列。我想排除示例列“name”中的数字,只取“number”列的第一个数字(不带字符串)。
我正在使用 data.table 并创建了这个框架:
df <- data.frame(x=c(1,2,3,4,5,6,7,8),
name=c('Tom', 'Maria. Anna3', 'Ina.2', 'Anna13', 'Tim2a', 'Zoé', 'Mark_1', 'Bea: 2'),
number=c('12, 13', '11/12', '3b', '12, 13', '134z', 'number 14', 'B3', '3-5'))
如上所述,我希望清理后的 table 像这样:
df_cleaned <- data.frame(x=c(1,2,3,4,5,6,7,8),
name=c('Tom', 'Maria Anna', 'Ina', 'Anna', 'Tim', 'Zoé', 'Mark', 'Bea'),
number=c('12', '11', '3', '12', '134', '14', '3', '3'))
非常感谢您的回复:)
您可以使用 readr::parse_number
来做到这一点。
readr::parse_number(df$number)
#[1] 12 11 3 12 134 14 3 3
或以 R 为基数 -
as.numeric(sub('.*?(\d+).*', '\1', df$number))
要清理名称,您可以使用正则表达式 -
df$name <- sub('([ :_.]|\d).*', '', df$name)
#[1] "Tom" "Maria" "Ina" "Anna" "Tim" "Zoé" "Mark" "Bea"
这个有用吗:
library(dplyr)
library(stringr)
df %>% mutate(name = str_extract(name, '[A-Za-z]+'), number = parse_number(number))
x name number
1 1 Tom 12
2 2 Maria 11
3 3 Ina 3
4 4 Anna 12
5 5 Tim 134
6 6 Zo 14
7 7 Mark 3
8 8 Bea 3
我尝试清理一个 data.frame,其中有包含文本和数字的列。我想排除示例列“name”中的数字,只取“number”列的第一个数字(不带字符串)。
我正在使用 data.table 并创建了这个框架:
df <- data.frame(x=c(1,2,3,4,5,6,7,8),
name=c('Tom', 'Maria. Anna3', 'Ina.2', 'Anna13', 'Tim2a', 'Zoé', 'Mark_1', 'Bea: 2'),
number=c('12, 13', '11/12', '3b', '12, 13', '134z', 'number 14', 'B3', '3-5'))
如上所述,我希望清理后的 table 像这样:
df_cleaned <- data.frame(x=c(1,2,3,4,5,6,7,8),
name=c('Tom', 'Maria Anna', 'Ina', 'Anna', 'Tim', 'Zoé', 'Mark', 'Bea'),
number=c('12', '11', '3', '12', '134', '14', '3', '3'))
非常感谢您的回复:)
您可以使用 readr::parse_number
来做到这一点。
readr::parse_number(df$number)
#[1] 12 11 3 12 134 14 3 3
或以 R 为基数 -
as.numeric(sub('.*?(\d+).*', '\1', df$number))
要清理名称,您可以使用正则表达式 -
df$name <- sub('([ :_.]|\d).*', '', df$name)
#[1] "Tom" "Maria" "Ina" "Anna" "Tim" "Zoé" "Mark" "Bea"
这个有用吗:
library(dplyr)
library(stringr)
df %>% mutate(name = str_extract(name, '[A-Za-z]+'), number = parse_number(number))
x name number
1 1 Tom 12
2 2 Maria 11
3 3 Ina 3
4 4 Anna 12
5 5 Tim 134
6 6 Zo 14
7 7 Mark 3
8 8 Bea 3