Imagine a person uses a phone randomly, and the use time is recorded.
# Let's make a data.frame first.
library(dplyr)
set.seed(1234)
my_data <- data.frame(
name = c(rep("Lily", 6), rep("Sam", 4)),
log_order = c(1:6, 1:4),
place = c(
rep("home", 2), rep("school", 2), rep("home", 2),
rep("school", 2), rep("home", 2)
),
use_time = sample(1:10, 10)
)
my_data
# name log_order place use_time
# 1 Lily 1 home 10
# 2 Lily 2 home 6
# 3 Lily 3 school 5
# 4 Lily 4 school 4
# 5 Lily 5 home 1
# 6 Lily 6 home 8
# 7 Sam 1 school 2
# 8 Sam 2 school 7
# 9 Sam 3 home 9
# 10 Sam 4 home 3
# In this case, for the first time, Lily stayed at home and used the phone for 10 minutes; for the second time, Lily used for 6 minutes; for the third time, Lily used the phone for 5 minutes at the school.
What I want to calculate, is the total use time of each person in each period by the log order. In this case, Lily has three "period"s, first and third one is at school and the second one is at home; while Sam has two periods, the first is at the school and the second is at home. The desired result is as follows.
my_data_period <- my_data %>%
mutate(period = c(
1, 1, 2, 2, 3, 3,
1, 1, 2, 2
))
my_data_period
# name log_order place use_time period
# 1 Lily 1 home 10 1
# 2 Lily 2 home 6 1
# 3 Lily 3 school 5 2
# 4 Lily 4 school 4 2
# 5 Lily 5 home 1 3
# 6 Lily 6 home 8 3
# 7 Sam 1 school 2 1
# 8 Sam 2 school 7 1
# 9 Sam 3 home 9 2
# 10 Sam 4 home 3 2
my_data_period %>%
group_by(name, period, place) %>%
summarise(tot_use_time = sum(use_time)) %>%
ungroup() %>%
select(-period)
# name place tot_use_time
# <chr> <chr> <int>
# 1 Lily home 16
# 2 Lily school 9
# 3 Lily home 9
# 4 Sam school 9
# 5 Sam home 12
How can I do that based on the group column ("place") and log_order column?