-1

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

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 吗?如果是这样,最优雅的方法是什么?

4

1 回答 1

-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
于 2017-02-09T07:13:24.637 回答