Rst*_*ent 5 r matrix ggplot2 dataframe
我有 2 个要合并的 data.frames。这两个 data.frames 具有不同的大小(例如dim (df1)=16533, 580 和dim(df2)= 2820, 675`)。
记录是由不同的人/群体在不同的日子制作的。
变量来自 df1
Index= 制作记录的一组人(例如,它可以代表1一个人2或更多人)
id1= 录制组中的人(例如12 1=group 12 person 1; 12 2 = group 12 person 2, etc. )
id2= 记录的第一天或第二天 ( eg. 12 1 1 = group 12, person 1, 1 day; 12 1 2 = group 12, person 1, 2 day;)
Day= 进行日记记录的工作日(例如 12 1 1 Wednesday =group 12, person 1, day 1, weekday Wednesday; 12 1 2 Sunday = group 12, person 1, day 1 , weekday Sunday)
这些变量后跟 24h observations
obs1_1-obs1_144=primary observation
obs2_1-obs2_144=secondary observations
obs3_1-obs3_144=tertiary observations
obs4_1-obs4_144=quarterly observations
示例
df1
index id1 id2 Day obs1_1...obs1_144....obs2_1...obs2_144...obs3_1...obs3_144...obs4_1...obs4_144
12 1 1 Wednesday 1 11 12
12 1 2 Sunday 2 0 0
123 1 1 Tuesday 1 0 1
123 1 2 Saturday 3 0 3
123 2 1 Monday 2 2 4
123 2 2 Saturday 1 0 8
Run Code Online (Sandbox Code Playgroud)
在df2观察中仅根据索引和 id1 记录。每人只有一次观察。类似地,这里还有一个 Day 变量,用于记录录制开始的时间(例如,不是录制当天)。例如,这里的 id 12 1 星期二表示第 12 个人 1 组从星期二开始记录观察结果。
一周分为:
Monday = 95 variables starting from day11-day196
(in the actual data t0400_0415_d1-t0345_0400_d1)
Tuesday = 95 variables starting day21-day296
(in the actual data t0400_0415_d2-t0345_0400_d2)
Wednesday = 95 variables starting day31-day396
(in the actual data t0400_0415_d3-t0345_0400_d3)
Thursday = 95 variables starting day41-day496
(in the actual data t0400_0415_d4-t0345_0400_d4)
Friday = 95 variables starting day51-day596
(in the actual data t0400_0415_d5-t0345_0400_d5)
Saturday = 95 variables starting day61-day696
(in the actual data t0400_0415_d6-t0345_0400_d6)
Sunday = 95 variables starting day71-day796
(in the actual data t0400_0415_d7-t0345_0400_d7)
Run Code Online (Sandbox Code Playgroud)
示例 df2
index id1 Day day11 day12 day13 day14 day15 day16 day17 .....day196......day796
12 1 Tuesday 2 1 2 1 1 3 1
123 1 Friday 0 3 0 3 3 0 3
Run Code Online (Sandbox Code Playgroud)
我想确定 df2 中与 df1 同一天记录的观察结果。
我的目标是:
df2识别连续记录(每日记录之间没有间隔)。例如,连续记录将是:记录从星期二开始,并且在星期三、星期四、星期五有记录。这被称为连续三个记录。如果记录在星期二开始并且在星期三和星期五有记录,则将是非连续记录。由于存在间隔日,因此这是非连续记录。
df1我想确定连续记录的人的索引和 id1 以及记录在连续观察中的位置(例如,在连续 3 次观察中,观察可能落在第 1,2 或 3 天)Post与我的问题之一有关
结果:
index id1 id2 obs1 obs2 obs3
12 1 1 1 11 12
12 1 2 2 0 0
123 1 2 3 0 3
123 2 2 1 0 8
Run Code Online (Sandbox Code Playgroud)
样本数据
df1:
structure(list(index = c(12, 12, 123, 123, 123, 123), id1 = c(1,
1, 1, 1, 2, 2), id2 = c(1, 2, 1, 2, 1, 2), Day = structure(c(5L,
3L, 4L, 2L, 1L, 2L), .Label = c("Monday", "Saturday", "Sunday",
"Tuesday", "Wednesday"), class = "factor"), obs1 = c(1, 2, 1,
3, 2, 1), obs2 = c(11, 0, 0, 0, 2, 0), obs3 = c(12, 0, 1, 3,
4, 8)), class = "data.frame", row.names = c(NA, -6L))
Run Code Online (Sandbox Code Playgroud)
df2:
structure(list(index = c(12, 123), id1 = c(1, 1), Day = structure(2:1, .Label = c("Friday",
"Tuesday"), class = "factor"), day1 = c(2, 0), day2 = c(1, 3),
day3 = c(2, 0), day4 = c(1, 3), day5 = c(1, 3), day6 = c(3,
0), day7 = c(1, 3)), class = "data.frame", row.names = c(NA,
-2L))
Run Code Online (Sandbox Code Playgroud)
我们可以Map创建一个键/值named向量,然后与列名进行匹配
lst1 <- Map(`:`, seq(11, 71, by = 10), seq(196, 796, by = 100))
names(lst1) <- c('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')
out <- stack(lst1)[2:1]
out$values <- paste0('day', out$values)
Run Code Online (Sandbox Code Playgroud)
-检查
setNames(as.character(out$ind), out$values)[c('day41', 'day182', 'day242', 'day724')]
# day41 day182 day242 day724
# "Monday" "Monday" "Tuesday" "Sunday"
Run Code Online (Sandbox Code Playgroud)