整理“并排”数据集

时间:2017-02-09 07:00:06

标签: r dplyr tidyr readr

我正在使用如下所示的广泛数据集:

library( tibble )
wide_data <- data_frame(month_1 = c("Jan", "Feb", "Mar", "Jun"),
                        score_1 = c(4, 5, 6, 4),
                        month_2 = c("Jan", "Mar", NA, NA),
                        score_2 = c(3, 2, NA, NA),
                        month_3 = c("Feb", "Mar", "Jun", NA),
                        score_3 = c(8, 7, 4, NA))

我想提供以下内容:

id month score
1  Jan   4
1  Feb   5
1  Mar   6
1  Jun   4
2  Jan   3
2  Mar   2
3  Feb   8  
3  Mar   7
3  Jun   4

请注意,初始数据集中的月份不会与观察结果对齐。什么是“整理”这个的最好方法?我是否应该一次只将基础数据读入R两列和bind_rows?如果是这样,最优雅的方式是什么?

1 个答案:

答案 0 :(得分:-1)

您可以通过搜索相关字符串的列名来将多个列绑定在一起。我正在使用grep来实现这一目标。

new <- data_frame(
    month = do.call( c, wide_data[ , grep( "^month_", names( wide_data ) ) ] ),
    score = do.call( c, wide_data[ , grep( "^score_", names( wide_data ) ) ] )
)

给出了:

> new
# A tibble: 12 × 2
   month score
   <chr> <dbl>
1    Jan     4
2    Feb     5
3    Mar     6
4    Jun     4
5    Jan     3
6    Mar     2
7   <NA>    NA
8   <NA>    NA
9    Feb     8
10   Mar     7
11   Jun     4
12  <NA>    NA