【问题标题】:Extract only characters, including spaces, from a column从列中仅提取字符,包括空格
【发布时间】:2017-08-14 04:00:14
【问题描述】:

我的数据结构如下:

df <- data.frame(Athlete = c('02 Paul Jones', '02 Paul Jones', '02 Paul Jones', '02 Paul Jones',
                             '02 Paul Jones', '02 Paul Jones', '02 Paul Jones', '02 Paul Jones',
                             '01 Joe Smith', '01 Joe Smith', '01 Joe Smith', '01 Joe Smith',
                             '01 Joe Smith', '01 Joe Smith', '01 Joe Smith', '01 Joe Smith'),
                 Period = c('P1', 'P1', 'P1', 'P1',
                            'P2', 'P2', 'P2', 'P2',
                            'P1', 'P1', 'P1', 'P1',
                            'P2', 'P2', 'P2', 'P2'))
# Make `Athlete` column a character
df$Athlete <- as.character(df$Athlete)

如何在保留名字和姓氏之间的空格的同时提取每个运动员的名字和姓氏?我不想要包括任何一个在内的领先空间。例如,"Paul Jones" 不是 " Paul Jones"

【问题讨论】:

  • 删除列中的所有数字怎么样? gsub('[0-9]+', '', df$Athlete)
  • This 几乎就是你想要的。
  • 另一种选择,trimws(gsub('\\d+', '', df$Athlete))
  • 这个解决方案很棒!

标签: r


【解决方案1】:

使用正则表达式模式的 POSIX 语言环境类型解释删除除字母 [:alpha:] 和空格字符 [:space:] 之外的所有字符。

df$Athlete <- as.character(df$Athlete)  # convert factor to character

df$Athlete <- gsub("[^[:alpha:][:space:]]", '', df$Athlete) 
df$Athlete <- gsub("^[[:space:]]+", '', df$Athlete )  # removing leading spaces

head(df)
#       Athlete Period
# 1  Paul Jones     P1
# 2  Paul Jones     P1
# 3  Paul Jones     P1
# 4  Paul Jones     P1
# 5  Paul Jones     P2
# 6  Paul Jones     P2

【讨论】:

  • 如果我把它转换回一个因子,水平仍然显示一个空格:&gt; levels(df$Athlete) [1] " Joe Smith" " Paul Jones"
【解决方案2】:

我们可以使用sub匹配一个或多个数字([0-9]+)后跟一个或多个空格(\\s+),从字符串的开头(^)开始,并将其替换为""

df$Athlete <- sub("^[0-9]+\\s+", "", df$Athlete)
df
#      Athlete Period
#1  Paul Jones     P1
#2  Paul Jones     P1
#3  Paul Jones     P1
#4  Paul Jones     P1
#5  Paul Jones     P2
#6  Paul Jones     P2
#7  Paul Jones     P2
#8  Paul Jones     P2
#9   Joe Smith     P1
#10  Joe Smith     P1
#11  Joe Smith     P1
#12  Joe Smith     P1
#13  Joe Smith     P2
#14  Joe Smith     P2
#15  Joe Smith     P2
#16  Joe Smith     P2

【讨论】:

    猜你喜欢
    • 2018-03-24
    • 2012-07-12
    • 1970-01-01
    • 2015-01-13
    • 2015-06-27
    • 2015-10-21
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多