【发布时间】:2016-06-11 04:26:07
【问题描述】:
我有一个看起来像这样的数据框
+---------+--------+--------+--------+-------+
| ID | week1_t| week1_a| week2_t|week2_a|
+---------+--------+--------+--------+-------+
| 1 | 12 | 22 | 17 | 4 |
| 1 | 15 | 32 | 18 | 5 |
| 1 | 24 | 12 | 29 | 6 |
| 2 | 45 | 11 | 19 | 8 |
| 2 | 23 | 33 | 20 | 10 |
+---------+--------+--------+--------+-------+
有 48 列(第 1 周 - 第 24 周),带有“t”和“a”后缀。我想将所有周列合并为一个“周”列,如下所示:
+---------+--------+--------+--------
| ID | week | t | a |
+---------+--------+--------+--------
| 1 | 1 | 22 | 17 |
| 1 | 2 | 32 | 18 |
| 1 | 3 | 12 | 19 |
| 1 | 5 | 33 | 20 |
+---------+--------+--------+-------
如何在 R 中进行这种转换?我想不出在多个 if 语句和 for 循环之外执行此操作的方法。
数据
dd <- read.table(header = TRUE, text = "ID week1_t week1_a week2_t week2_a
1 12 22 17 4
1 15 32 18 5
1 24 12 29 6
2 45 11 19 8
2 23 33 20 10")
【问题讨论】:
-
Package dplyr 具有您需要的所有功能。这是一个方便的备忘单:rstudio.com/wp-content/uploads/2015/02/…
-
请展示您的尝试。并且不要使用那种表格格式。
-
reshape(dd, dir = 'long', varying = lapply(c('t','a'), grep, names(dd)), timevar = 'week')
标签: r