分割列值以及如何使用R分配到特定的多列

时间:2017-06-20 17:38:10

标签: sql r sqldf

R中的

数据框看起来像这样

**NAME**      |   MONTH
jana|   19-25| jan,mar,sep,dec
pugal|  45-50| april,may,june
--

我希望我的答案应该看起来

jana|   19-25|  jan
jana|   19-25|  mar
jana|   19-25|  sep
jana|   19-25|  dec
pugal|  45-50|  april
pugal|  45-50|  may
pugal|  45-50|  june

2 个答案:

答案 0 :(得分:-1)

这就是你想要的

n=c("jana| 19-25| jan,mar,sep,dec", "pugal| 45-50| april,may,june")

df = data.frame(n)

a=data.frame(do.call(rbind, strsplit(as.character(df$n),'|',fixed=TRUE)))
b=as.data.frame(do.call(rbind, apply(a, 1, function(x) { do.call(expand.grid, strsplit(x, " *, *"))})))

答案 1 :(得分:-1)

dplyr中的

separate_rows可以做到这一点:

library(tidyr)

DF %>% separate_rows(MONTH)

结果是:

   NAME RANGE MONTH
1  jana 19-25   jan
2  jana 19-25   mar
3  jana 19-25   sep
4  jana 19-25   dec
5 pugal 45-50 april
6 pugal 45-50   may
7 pugal 45-50  june

注意:问题中显示的输入数据有两个列标题,但有三列,所以我们改用了它:

Lines <- "NAME | RANGE | MONTH
jana| 19-25| jan,mar,sep,dec
pugal| 45-50| april,may,june"

DF <- read.table(text = Lines, header = TRUE, sep = "|", strip.white = TRUE)