【问题标题】:R: Separate Text String by Space and Remove Tabs, Line Breaks, EtcR:用空格分隔文本字符串并删除制表符、换行符等
【发布时间】:2018-08-21 14:45:06
【问题描述】:

读取 HTML 表格后,我的name 列出现,记录如下:

\n\t\t\t\t\t\t\t\t\t\t\t\t\tMike Moon\n\t\t\t\t\t\t\t\t

以下代码无法在名字和姓氏列中生成正确的值

separate(data=nametable, col = Name, into = c("First","Last"), sep= " ")

奇怪的是,First 列是空白的,而 Last 列只包含此人的名字。

我怎样才能正确将此列转换为所需的FirstLast 列(即...

First     Last
Mike      Moon

@r2evans 推荐的数据示例,如下面的正确答案代码所示:

nametable <- data.frame(Name="\n\t\t\t\t\t\t\t\t\t\t\t\t\tMike Moon\n\t\t\t\t\t\t\t\t", stringsAsFactors=FALSE)

【问题讨论】:

  • 请提出这个问题reproducible。这首先要提供可重用的数据,例如dput(head(nametable))。下一步是确保你包含所有非基础包,我假设你的意思是tidyr::separate
  • 如果我只用这个字符串创建一个小标题,tidyr::separate 用于获取名字和姓氏;他们每个人都有很多转义字符。因此,您的帖子中可能缺少一些东西来重现问题
  • @r2evans 感谢您的建议和快速回答。我已将您的答案代码中反映的示例数据添加到原始问题中。

标签: r text-mining stringr


【解决方案1】:

在继续之前修剪字段中的空白可能会有所帮助。 trimws 删除“字符串中的前导和/或尾随空格”(来自?trimws)。

数据:

nametable <- data.frame(Name="\n\t\t\t\t\t\t\t\t\t\t\t\t\tMike Moon\n\t\t\t\t\t\t\t\t", stringsAsFactors=FALSE)

library(dplyr)
nametable %>% mutate(Name = trimws(Name))
#        Name
# 1 Mike Moon

我推断你正在使用dplyr 以及tidyr,所以我在这里使用它。在不使用 dplyr 的情况下执行 nametable$Name &lt;- trimws(nametable$Name) 也非常简单。 从这里开始,就像你最初编码的那样:

nametable %>%
  mutate(Name = trimws(Name)) %>%
  tidyr::separate(col=Name, into=c("First", "Last"))
#   First Last
# 1  Mike Moon

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 2014-02-11
    相关资源
    最近更新 更多