假设我有以下数据:
> foo <- data.frame(x=c(1,2,3), y=c("a", "b|c", "d|e|f"))
> foo
x y
1 1 a
2 2 b|c
3 3 d|e|f
我想说的是:
> foo_long <- data.frame(x=c(1,2,2,3,3,3), y=c("a", "b", "c", "d", "e", "f"))
> foo_long
x y
1 1 a
2 2 b
3 2 c
4 3 d
5 3 e
6 3 f
我已经走到了
> foo_long <- foo %>% mutate(y=str_split(y, "\\|"))
> foo_long
x y
1 1 a
2 2 b, c
3 3 d, e, f
> str(foo_long)
'data.frame': 3 obs. of 2 variables:
$ x: num 1 2 3
$ y:List of 3
..$ : chr "a"
..$ : chr "b" "c"
..$ : chr "d" "e" "f"
但y列是向量,我不知道如何从向量中得到值.
EDIT:事实上,到最后我希望达到foo_long2
以下,但我认为这是另一个问题.
foo_long2 <- data.frame(x=c(1,2,3),
a=c(1,0,0), b=c(0,1,0), c=c(0,1,0),
d=c(0,0,1), e=c(0,0,1), f=c(0,0,1))
> foo_long2
x a b c d e f
1 1 1 0 0 0 0 0
2 2 0 1 1 0 0 0
3 3 0 0 0 1 1 1