【问题标题】:How to split an element in a character vector and insert it as a new element?如何拆分字符向量中的元素并将其作为新元素插入?
【发布时间】:2016-08-30 07:02:47
【问题描述】:

我有一个包含 5 个元素的字符向量。 4 个元素包含一个名称,但一个元素包含两个名称,以逗号分隔。

例如:

string <- c("Eric", "John", "Dora", "Michael, James", "Susan")

string
[1] "Eric"           "John"           "Dora"           "Michael, James" "Susan"

我想将第四个元素分成两个单独的元素,这样:

string

[1] "Eric"    "John"    "Dora"    "Michael" "James"   "Susan" 

当然,这应该很容易。然而,我似乎无法弄清楚。

当我使用时

strsplit(string, ",")

结果是一个列表。

我相信有办法将该列表转换为 data.frame 然后堆叠这些列,但我想知道这个问题是否有一些正则表达式魔术或substring 代码?

【问题讨论】:

  • 只需在 strsplit 上使用 unlist
  • 所以unlist(strsplit(string, ","))
  • 您也可以考虑在'\\s+' 上进行拆分,这样就不会像在使用, 作为拆分的情况下那样保留额外的空格。

标签: r string split


【解决方案1】:

strsplit 是正确的,只需使用 unlist 获取向量。

> unlist(strsplit(string, ","))
[1] "Eric"    "John"    "Dora"    "Michael" " James"  "Susan" 

【讨论】:

  • 不确定如果没有“James”前面的空格作为拆分值,您是如何得到这个结果的。我得到" James"
  • @RichardScriven 是对的。您是否只是修改了输出以使其看起来更好?这应该类似于unlist(strsplit(string, "\\s*,\\s*"))。最好不要忽视那些试图改进写得不好的答案的 cmets,因为它最终会被否决。
【解决方案2】:

您也可以使用scan() 来避免将列表结果放在一起。

scan(text = string, what = "", sep = ",", strip.white = TRUE)
# Read 6 items
# [1] "Eric"    "John"    "Dora"    "Michael" "James"   "Susan"  

【讨论】:

  • scan 函数需要很长时间来计算我的真实数据。你知道为什么会这样吗?只是好奇。
  • @wake_wake - 你的真实数据有多大?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 2010-12-02
  • 1970-01-01
  • 2019-09-24
  • 2011-09-17
  • 2019-09-10
  • 2022-01-09
相关资源
最近更新 更多