我有一个按时间戳和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),如果重要的话。任何帮助表示赞赏。
答案 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)