R:用棘手的分隔符将一列分成几行
R: Separate a column into rows with tricky separators
我想将一个包含文本数据的列分成两列,但分隔符管理非常棘手,我相信有一个正则表达式解决方案,但不是很精通它来找到方法。
数据集样本为:
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))
我想将一个包含文本数据的列分成两列,但分隔符管理非常棘手,我相信有一个正则表达式解决方案,但不是很精通它来找到方法。 数据集样本为:
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))