这是我的数据框:
data_frame(id= c(1,2,3),
x=c('19,22,77', '49,67', '28,19,45,23'),
y=c('19,22,77', '49,67', '28,19,45,23'),
t=c('10,20,30', '49,67', '28,19,45,23'))
逗号分隔值是同一id
随时间的不同观察结果,因此我希望以逗号形式对其进行重新分析,并以纵向格式重新整形,但保留与id
的关联
例如,id=1
的输出应该只有:
# A tibble: 3 × 4
id x y t
<dbl> <dbl> <dbl> <dbl>
1 1 19 19 10
2 1 22 22 20
3 1 77 77 30
答案 0 :(得分:2)
这是data.table的一种方法。
library(data.table)
setDT(df)[, lapply(.SD, tstrsplit, split=","), by=id]
id x y t
1: 1 19 19 10
2: 1 22 22 20
3: 1 77 77 30
4: 2 49 49 49
5: 2 67 67 67
6: 3 28 28 28
7: 3 19 19 19
8: 3 45 45 45
9: 3 23 23 23
对于每个id,我们lapply
通过变量并应用trsplit
(转置字符串拆分),在逗号上拆分。
数据强>
df <- data.frame(id= c(1,2,3),
x=c('19,22,77', '49,67', '28,19,45,23'),
y=c('19,22,77', '49,67', '28,19,45,23'),
t=c('10,20,30', '49,67', '28,19,45,23'))
答案 1 :(得分:2)
此外,您可以使用tidyr
:
library(tidyr)
separate_rows(df,x,y,t, sep = ",")
答案 2 :(得分:1)
使用hadleyverse的替代解决方案
library(magrittr)
dplyr::data_frame(id= c(1,2,3),
x=c('19,22,77', '49,67', '28,19,45,23'),
y=c('19,22,77', '49,67', '28,19,45,23'),
t=c('10,20,30', '49,67', '28,19,45,23')) %>%
dplyr::mutate_if(is.character, stringr::str_split, pattern=',') %>%
tidyr::unnest()
# A tibble: 9 × 4
id x y t
<dbl> <chr> <chr> <chr>
1 1 19 19 10
2 1 22 22 20
3 1 77 77 30
4 2 49 49 49
5 2 67 67 67
6 3 28 28 28
7 3 19 19 19
8 3 45 45 45
9 3 23 23 23