首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清除R data.table中的字符串列和数字列

清除R data.table中的字符串列和数字列
EN

Stack Overflow用户
提问于 2021-10-21 06:50:58
回答 2查看 81关注 0票数 0

我尝试清理一个包含文本和数字列的data.frame。我想排除示例列"name“中的数字,只取列" number”的第一个数字(没有字符串)。

我使用data.table并创建了这个框架:

代码语言:javascript
复制
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'))

如上所述,我希望得到一个干净的表,如下所示:

代码语言:javascript
复制
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'))

非常感谢您的回复:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-21 06:53:30

您可以使用readr::parse_number,它就是这样做的。

代码语言:javascript
复制
readr::parse_number(df$number)
#[1]  12  11   3  12 134  14   3   3

或者在R基地-

代码语言:javascript
复制
as.numeric(sub('.*?(\\d+).*', '\\1', df$number))

要清理名称,可以使用regex -

代码语言:javascript
复制
df$name <- sub('([ :_.]|\\d).*', '', df$name)
#[1] "Tom"   "Maria" "Ina"   "Anna"  "Tim"   "Zoé"   "Mark"  "Bea"  
票数 4
EN

Stack Overflow用户

发布于 2021-10-21 07:02:03

这样做是可行的:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69657183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档