我想将字符串中的每个字母或符号分开,以组成一个新的data.frame
,其尺寸等于字母的数量。我尝试使用separate
包中的函数tidyr
,但结果不理想。
df <- data.frame(x = c('house', 'mouse'), y = c('count', 'apple'), stringsAsFactors = F)
df[1, ] %>% separate(x, c('A1', 'A2', 'A3', 'A4', 'A5'), sep ='')
A1 A2 A3 A4 A5 y
1 <NA> <NA> <NA> <NA> <NA> count
A1 A2 A3 A4 A5
h o u s e
m o u s e
欢迎使用stringr
的解决方案。
答案 0 :(得分:5)
我们可以在sep
中使用正则表达式环顾四周以匹配每个字符之间的边界
library(dplyr)
library(tidyr)
library(stringr)
df %>%
select(x) %>%
separate(x, into = str_c("A", 1:5), sep= "(?<=[a-z])(?=[a-z])")
# A1 A2 A3 A4 A5
#1 h o u s e
#2 m o u s e
答案 1 :(得分:2)
base
中的解决方案是:
do.call(rbind , sapply(df$x, function(col) strsplit(col, "")))
# [,1] [,2] [,3] [,4] [,5]
# house "h" "o" "u" "s" "e"
# mouse "m" "o" "u" "s" "e"
答案 2 :(得分:2)
我们可以将cSplit
中的splitstackshape
与stripWhite = FALSE
和sep = ""
一起使用来拆分列中的每个字母。
splitstackshape::cSplit(df, "x", sep = "", stripWhite = FALSE)
# y x_1 x_2 x_3 x_4 x_5
#1: count h o u s e
#2: apple m o u s e