我正在使用如下所示的广泛数据集:
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?如果是这样,最优雅的方式是什么?
答案 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