重组R中的数据

时间:2017-05-24 17:36:13

标签: r

我正在从4个传感器收集数据,我有一个带有时间戳的数据帧和每个传感器的一个变量。数据框如下所示:

img1

我想重新组织我的数据,如下所示:

img2

我的解决方案涉及删除每个变量并将它们合并在一起,但必须有更好的方法来实现这一点。

很抱歉这个显而易见的问题,但我找不到其他人发帖的答案。

谢谢!

1 个答案:

答案 0 :(得分:0)

我重新创建了一个与您提供的数据结构相匹配的虚拟数据集。将来,请使用@ r2evans提供的建议来提供可重现的数据。这样可以更轻松地回答您的问题。

供参考,查看tidyr并收集。这用于将数据从wide(您的数据)转换为long(您想要的数据结构)。

使用的包:

library(tidyverse)

您的数据示例:

data <- data.frame("WPT1" = sample(1:100,10),
              "WPT2" = sample(1:100,10),
              "WPT3" = sample(1:100,10),
              "WPT4" = sample(1:100,10),
              "dt" = sample(seq(as.Date('1999/01/01'), 
                              as.Date('2000/01/01'), by="day"), 10)
)

head(data)[1:5]

  WPT1 WPT2 WPT3 WPT4         dt
1   33   49   79   85 1999-06-30
2   62   13   75   45 1999-07-16
3   96   86   60   34 1999-03-10
4    4   21   66   64 1999-08-18
5   49   70   32   49 1999-09-04

转换为长格式:

data.long <- data %>%
  gather(ID,WP,-dt) %>%
  mutate(ID = replace(ID,ID == "WPT1",1),
         ID = replace(ID,ID == "WPT2",2),
         ID = replace(ID,ID == "WPT3",3),
         ID = replace(ID,ID == "WPT4",4),
         ID = as.numeric(ID)
         )    

输出:

head(data.long)[1:5,]

      dt ID WP
1 1999-06-30  1 33
2 1999-07-16  1 62
3 1999-03-10  1 96
4 1999-08-18  1  4
5 1999-09-04  1 49