R 与给定变量的距离
我想从数据帧返回变量的位置。具有的数据有一个序列号(标识号),Day1(从周一到周日的一周天数)记录观察的开始日期,以及7个变量Day1到day7,每个变量表示一周中的一天。第一天是周一,第七天是太阳 还有一个WkDay2变量用于记录一周内观察的位置 我想确定任何观察的位置。开始日期记录在工作日1中。例如,在id 12的情况下,观察从周一开始,周三(第三天)记录了一个新的观察。在ID123的案例中,观察开始于周二,并在同一天或第一天记录了新的观察结果。最后,id 10,在周四进行观察,并在第4天(WDay1之后)或周日进行新的观察 输入:R 与给定变量的距离,r,dataframe,R,Dataframe,我想从数据帧返回变量的位置。具有的数据有一个序列号(标识号),Day1(从周一到周日的一周天数)记录观察的开始日期,以及7个变量Day1到day7,每个变量表示一周中的一天。第一天是周一,第七天是太阳 还有一个WkDay2变量用于记录一周内观察的位置 我想确定任何观察的位置。开始日期记录在工作日1中。例如,在id 12的情况下,观察从周一开始,周三(第三天)记录了一个新的观察。在ID123的案例中,观察开始于周二,并在同一天或第一天记录了新的观察结果。最后,id 10,在周四进行观察,并在第4天
serial day1 day2 day3 day4 day5 day6 day7 WkDay1 WkDay2
12 2 1 2 1 1 3 1 Monday Wednesday
123 0 3 0 3 3 0 3 Tuesday Tuesday
10 0 3 3 3 3 3 3 Thursday Sunday
输出:
serial Position
12 Third
123 First
10 Fourth
我们可以使用
match
创建带有“wkdays”向量的映射,然后使用Map
,获取从“WkDay1”到“WkDay2”的序列,检查长度
,并将其转换为序号
(来自英语
)
数据
df1
library(english)
wkday <- c("Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday", "Sunday")
m1 <- match(df1$WkDay1, wkday)
m2 <- match(df1$WkDay2, wkday)
Position <- unlist( Map(function(i, j, x) as.character(ordinal(length(i:j))),
m1, m2, asplit(df1[startsWith(names(df1), "day")], 1)))
cbind(df1['serial'], Position = tools::toTitleCase(Position))
# serial Position
#1 12 Third
#2 123 First
#3 10 Fourth
library(dplyr)
library(tidyr)
df1 %>%
pivot_longer(cols = starts_with('day'), names_to = 'day') %>%
filter(value > 0) %>%
group_by(serial) %>%
summarise(Position = tools::toTitleCase(as.character(ordinal(length(
match(first(WkDay1),
wkday):match(first(WkDay2), wkday))))))
# A tibble: 3 x 2
# serial Position
# <int> <chr>
#1 10 Fourth
#2 12 Third
#3 123 First
df1 <- structure(list(serial = c(12L, 123L, 10L), day1 = c(2L, 0L, 0L
), day2 = c(1L, 3L, 3L), day3 = c(2L, 0L, 3L), day4 = c(1L, 3L,
3L), day5 = c(1L, 3L, 3L), day6 = c(3L, 0L, 3L), day7 = c(1L,
3L, 3L), WkDay1 = c("Monday", "Tuesday", "Thursday"),
WkDay2 = c("Wednesday",
"Tuesday", "Sunday")), class = "data.frame", row.names = c(NA,
-3L))