R 如何通过第二个冒号将字符串拆分为单独的变量?
我有一个字符串:R 如何通过第二个冒号将字符串拆分为单独的变量?,r,text,split,R,Text,Split,我有一个字符串: [1] "x: user1 : value1" [2] ": user2 : value2" [3] ": user2 value3" [4] ": user4 : value4" 我需要通过第二个冒号将用户id拆分为user\u id变量,并将第二个冒号后面的文本拆分为var1变量。 我还需要为每个观察添加一个class变量,如果有两个冒号,则该变量将填充a。如果字符串中没有第二个冒号,那么我需要用b填充class变量 最后我需要的数据帧如下所示: user_id
[1] "x: user1 : value1"
[2] ": user2 : value2"
[3] ": user2 value3"
[4] ": user4 : value4"
我需要通过第二个冒号将用户id拆分为user\u id变量,并将第二个冒号后面的文本拆分为var1变量。
我还需要为每个观察添加一个class变量,如果有两个冒号,则该变量将填充a。如果字符串中没有第二个冒号,那么我需要用b填充class变量
最后我需要的数据帧如下所示:
user_id var1 class
user1 value1 a
user2 value2 a
user2 value3 b
user4 value4 a
使用
substr
在R中是否有一种方便的方法来实现这一点?我们可以通过使用sub
仅提取所需的子字符串并使用read.csv
从字符串的向量中创建数据.frame
。我们从字符串的开头(^
)匹配0个或多个非:
([^:]*
)字符,后跟一个:
,后跟一个或多个空白字符(\\s+
),后跟单词(\\w+
),作为一个组捕获((…)
),然后匹配标点符号或空格与第二个单词。在替换中,我们使用反向引用来表示由,
分隔的捕获组。它用作read.csv
的输入,将其作为两列data.frame
读取。“类”列是使用来自stringr
包的stru计数创建的
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
库(stringr)
df1
str1 <- c( "x: user1 : value1", ": user2 : value2", ": user2 value3", ": user4 : value4")