R 如何挑选一个团队中相互之间有某种关系的某些元素?
我有一个家庭专栏。我还有一个家庭成员专栏,另一个专栏介绍他们的旅行方式。此列为1或2。1人是驾驶员,2人是乘客。我已经确定谁是哪个乘客的司机。所以,我需要使用其他信息来确定这一点。我有一个关于开始时间的栏和一个关于旅行持续时间的栏。因此,如果乘客j的启动时间和持续时间相同,司机i会让乘客j搭车。如果使用2列很复杂,那么开始时间就足够了 这里有一个例子R 如何挑选一个团队中相互之间有某种关系的某些元素?,r,dataframe,R,Dataframe,我有一个家庭专栏。我还有一个家庭成员专栏,另一个专栏介绍他们的旅行方式。此列为1或2。1人是驾驶员,2人是乘客。我已经确定谁是哪个乘客的司机。所以,我需要使用其他信息来确定这一点。我有一个关于开始时间的栏和一个关于旅行持续时间的栏。因此,如果乘客j的启动时间和持续时间相同,司机i会让乘客j搭车。如果使用2列很复杂,那么开始时间就足够了 这里有一个例子 Household person mode start_time duration_time 1
Household person mode start_time duration_time
1 1 1 8:25 10
1 1 1 16:00 20
1 2 2 8:25 10
1 3 2 16:00 20
2 1 1 15:00 4
2 1 2 20:00 20
2 2 2 15:00 4
2 2 1 20:00 20
所以我需要一些东西来显示乘客和司机在同一排的指数。乘客行可以是乘客本身的索引,如下所示:
Household person mode start_time duration_time passenger
1 1 1 8:25 10. 2
1 1 1 16:00 20 3
1 2 2 8:25 10 2
1 3 2 16:00 20 3
2 1 1 15:00 4 2
2 1 2 20:00 20. 1
2 2 2 15:00 4 2
2 2 1 20:00 20 1
或者取消这排乘客,我们就可以
Household person mode. start time. duration time. passenger
1 1 1 8:25 10. 2
1 1 1 16:00 20 3
2 1 1 15:00 4 2
2 2 1 20:00 20 1
有什么帮助吗
如果我有旅行号码,我想保留乘客的旅行号码,怎么样
Household person mode start_time duration_time trip
1 1 1 8:25 10. 1
1 1 1 16:00 20 2
1 2 2 8:25 10 1
1 3 2 16:00 20 1
2 1 1 15:00 4 1
2 1 2 20:00 20. 2
2 2 2 15:00 4 1
2 2 1 20:00 20 2
以及输出
Household person mode. start time. duration time. passenger trip
1 1 1 8:25 10. 2 1
1 1 1 16:00 20 3 1
2 1 1 15:00 4 2 1
2 2 1 20:00 20 1 2
鉴于目前提供的数据,我向您提出以下建议。您的数据称为
mydf
。请注意,start\u time
现在是字符。我使用家庭
、开始时间
和持续时间
定义了组。然后,我创建了一个字符串,包括person
。字符串中的第一个数字表示驱动程序。如果需要,您希望修改最终结果
library(tidyverse)
group_by(mydf, Household, start_time, duration_time) %>%
summarize(person = paste(person[order(mode)], collapse = "-")) %>%
ungroup
# A tibble: 4 x 4
# Household start_time duration_time person
# <int> <chr> <int> <chr>
#1 1 16:00 20 1-3
#2 1 8:25 10 1-2
#3 2 15:00 4 1-2
#4 2 20:00 20 2-1
资料
mydf2我们可以根据家庭、开始时间和持续时间进行分组,并在每组中选择个人,模式==1
和模式==2
library(dplyr)
df %>%
group_by(Household,start_time, duration_time) %>%
summarise(passenger = person[mode == 2],
person = person[mode == 1]) %>%
mutate(mode = 1)
# Household start_time duration_time passenger person mode
# <int> <chr> <int> <int> <int> <dbl>
#1 1 16:00 20 3 1 1
#2 1 8:25 10 2 1 1
#3 2 15:00 4 2 1 1
#4 2 20:00 20 1 2 1
库(dplyr)
df%>%
分组依据(家庭、开始时间、持续时间)%>%
总结(乘客=人[模式==2],
人员=人员[模式==1])%>%
变异(模式=1)
#家庭开始时间持续时间乘客模式
#
#1 1 16:00 20 3 1 1
#2 1 8:25 10 2 1 1
#3 2 15:00 4 2 1 1
#4 2 20:00 20 1 2 1
如果第一个数字是司机,第二个家庭的第二个乘客,行程从20:00开始,第二个是司机,第一个是乘客,我们应该有2个-1@akrun好久不说话了。谢谢你的评论。我正在做我的工作,我无法回复你。我想这就是OP的要求。我修改了代码以反映OP所说的内容。我们将看看这是否足够。@sherek_66如果您能提供一个样本数据,我很乐意帮助您。但我可以在工作之后再做。@sherek_66为什么家庭2的输出中有1和2(行程编号)相反?考虑到您提供的数据,这似乎不一致。我看不出你的逻辑。@sherek_66我补充了一个建议。希望这对你有帮助。我要去睡觉了。如果你需要进一步的帮助,你要考虑问另一个问题。还有一件事。你要详细地写下你的问题。否则,用户不会清楚地知道您想要什么。
group_by(mydf2, Household, start_time, duration_time) %>%
summarize(person = paste(person[order(mode)], collapse = "-"),
trip = trip[mode == 2]) %>%
ungroup
# A tibble: 4 x 5
# Household start_time duration_time person trip
# <int> <chr> <dbl> <chr> <int>
#1 1 16:00 20 1-3 1
#2 1 8:25 10 1-2 1
#3 2 15:00 4 1-2 1
#4 2 20:00 20 2-1 2
mydf2 <- structure(list(Household = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L),
person = c(1L, 1L, 2L, 3L, 1L, 1L, 2L, 2L), mode = c(1L,
1L, 2L, 2L, 1L, 2L, 2L, 1L), start_time = c("8:25", "16:00",
"8:25", "16:00", "15:00", "20:00", "15:00", "20:00"), duration_time = c(10,
20, 10, 20, 4, 20, 4, 20), trip = c(1L, 2L, 1L, 1L, 1L, 2L,
1L, 2L)), class = "data.frame", row.names = c(NA, -8L))
library(dplyr)
df %>%
group_by(Household,start_time, duration_time) %>%
summarise(passenger = person[mode == 2],
person = person[mode == 1]) %>%
mutate(mode = 1)
# Household start_time duration_time passenger person mode
# <int> <chr> <int> <int> <int> <dbl>
#1 1 16:00 20 3 1 1
#2 1 8:25 10 2 1 1
#3 2 15:00 4 2 1 1
#4 2 20:00 20 1 2 1