这是一个简单的测试案例。
计划拆分并仅提取每个字符串的第一部分。
library(dplyr)
library(stringr)
test = data.frame(x= c('a b', 'c d'),stringsAsFactors = F)
test
x
1 a b
2 c d
test %>% mutate(y = str_split(x,'\\s+')[[1]][1])
x y
1 a b a
2 c d a
期待的是:
x y
1 a b a
2 c d c
答案 0 :(得分:3)
现在有各种打包功能可以将列拆分成碎片。在这里,您可以使用 tidyr 包中的separate()
函数。由于您希望在空格上分割的第一个值,您可以删除第一个空格后的所有内容。
tidyr::separate(test, x, "y", "\\s.*", FALSE, extra = "drop")
# x y
# 1 a b a
# 2 c d c
答案 1 :(得分:2)
str_split返回一个列表,其中每个元素对应于原始原子向量中的元素。因此,您需要使用lapply
或类似的方法进行适当的索引
test %>% mutate(y = unlist(lapply(str_split(x,'\\s+'),'[[',1)))
答案 2 :(得分:2)
我们也可以使用sub
library(data.table)
setDT(test)[, y:= sub('\\s+.*', '', x)]
test
# x y
#1: a b a
#2: c d c