R:用复杂的分隔符将列分隔成行



我想把一个包含文本数据的列分成两列,但分隔符管理非常棘手,我相信有一个regex解决方案,但并不精通它。数据集示例为:

Obs           Message
1       "a : 3 b : 5"
2       "c : 4 a : 2 d : 9"
3       ""
4       "b : 3"

数据块由空格分隔,变量/值由":">

我的尝试:

library (tidyr)
data %>%  separate(Message, sep= " : ", into = c("variable","value"))
>
Obs variable value
1      1        a   3 b
2      2        c   4 a
3      3           <NA>
4      4        b     3

需要额外的步骤,因为可变长度的消息会打乱逻辑。

如果有人请看一看,让我知道是否有任何正则表达式(或其他方法(会有所帮助。感谢您对此的投入。

编辑:添加预期输出:

Obs Variable Value
1    "a"      3    
1    "b"      5    
2    "c"      4    
2    "a"      2    
2    "d"      9    
3    ""       ""   
4    "b"      3

您可以使用separate_rows+separate

library(dplyr)
library(tidyr)
df %>%
separate_rows(Message, sep = '\s(?=[a-z])') %>%
separate(Message, c('variable', 'value'), sep = ' : ', fill = 'right', convert = TRUE)
#    Obs variable value
#  <int> <chr>    <int>
#1     1 "a"          3
#2     1 "b"          5
#3     2 "c"          4
#4     2 "a"          2
#5     2 "d"          9
#6     3 ""          NA
#7     4 "b"          3

数据

df <- structure(list(Obs = 1:4, Message = c("a : 3 b : 5", "c : 4 a : 2 d : 9", 
"", "b : 3")), class = "data.frame", row.names = c(NA, -4L))

相关内容

  • 没有找到相关文章

最新更新