【问题标题】:How do I split a string into separate variables by the second colon?如何通过第二个冒号将字符串拆分为单独的变量?
【发布时间】:2017-02-13 06:59:52
【问题描述】:

我有一个字符串:

 [1] "x: user1 : value1"
 [2] ": user2 : value2"
 [3] ": user2 value3"
 [4] ": user4 : value4"

我需要通过第二个冒号将用户 ID 拆分为 user_id 变量,并将第二个冒号后的文本拆分为 var1 变量。 我还需要为每个观察添加一个 class 变量,如果有两个冒号,它将用 a 填充。如果字符串中没有第二个冒号,那么我需要用 b 填充 class 变量。

最后我需要的数据框如下所示:

user_id    var1       class
  user1    value1       a
  user2    value2       a
  user2    value3       b
  user4    value4       a

在 R 中有没有一种方便的方法可以使用 substr 来做到这一点?

【问题讨论】:

    标签: r text split


    【解决方案1】:

    我们可以通过使用sub 并使用read.csv 仅提取所需的子字符串,从字符串的vector 创建一个data.frame。我们从字符串的开头 (^) 开始匹配 0 个或多个不是 : ([^:]*) 的字符,然后是 :,然后是一个或多个空格字符 (\\s+),然后按单词 (\\w+),捕获为一组 ((...)),然后匹配标点符号或空格和第二个单词。在替换中,我们使用由, 分隔的捕获组的反向引用。它用作read.csv 的输入,以将其读取为2 列data.frame。 'class' 列是使用来自stringr 包的str_count 创建的

    library(stringr)
    df1 <- read.csv(text=sub("^[^:]*:\\s+(\\w+)[[:punct:] ]+(\\w+)", "\\1,\\2", str1), 
        header=FALSE, stringsAsFactors=FALSE, col.names = c("user_id", "var1"))
    df1$class <-  c("b", "a")[str_count(str1, ":")]
    df1
    #  user_id   var1 class
    #1   user1 value1     a
    #2   user2 value2     a
    #3   user2 value3     b
    #4   user4 value4     a
    

    数据

    str1 <- c( "x: user1 : value1", ": user2 : value2", ": user2 value3", ": user4 : value4")
    

    【讨论】:

      猜你喜欢
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 2018-01-31
      • 2017-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多