通过id和活动强度预测(总和)重塑

时间:2018-05-12 17:14:43

标签: r dataframe reshape

我有一个按时间戳和ID组织的数据框。对于每个ID#和每分钟,我有8列数据,每列有四种不同类型的活动强度预测。预测可能是久坐,轻,中,或有力。数据的格式如下。

id  time    x1          x2     x3
1   10:30   Moderate    Light  Light
1   10:31   Moderate    Light  Moderate
...
2   12:24   Light       Light  Light
2   12:25   Light       Light  Light

我希望获得每个ID的每个预测变量(x1,x2,x3,...等)的每个活动强度的总和。使用上面的例子,我希望重塑我的数据,看起来像这样:

id  Intensity   x1     x2     x3
1   Light       0      2      1
1   Moderate    2      0      1
...
2   Light       2       2     2
2   Moderate    0       0     0

我的文件有大约80个ID和8个活动强度预测列(x1-x8),如果重要的话。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

以下是使用tidyverse套件的解决方案:

library(tidyverse)

values <- c("Sedentary", 'Light', 'Moderate', 'Vigorous')
df %>%
  mutate_at(vars(starts_with("x")), ~ factor(., levels = values)) %>%
  gather(key, value, - id, - time, factor_key = TRUE) %>%
  group_by(id, key, value) %>%
  summarize(
    n = n()
  ) %>%
  spread(key, n, fill = 0L, drop = FALSE)

答案 1 :(得分:0)

假设未使用变量time,您可以执行以下操作:

library(tidyverse)
library(data.table)

df %>%
  select(-time) %>% 
  data.table::melt("id") %>% 
  data.table::dcast(id+value~variable) %>% 
  rename(Intensity = value)