R 如何选择一个组中的两行,其中某列中的值相同,而某列中的值不同?
我有一个col1家庭指数,col2每个家庭的人员指数,col3每个人的旅行方式,col4和col5活动的开始和结束时间如何选择每个家庭中的某一行,司机和乘客的开始时间和结束时间相同 例如:R 如何选择一个组中的两行,其中某列中的值相同,而某列中的值不同?,r,dataframe,R,Dataframe,我有一个col1家庭指数,col2每个家庭的人员指数,col3每个人的旅行方式,col4和col5活动的开始和结束时间如何选择每个家庭中的某一行,司机和乘客的开始时间和结束时间相同 例如: family persons mode start time end time 1 1 driver 3 8:45 1 1 walk 8:45
family persons mode start time end time
1 1 driver 3 8:45
1 1 walk 8:45 13:30
1 1 bus 13:30 15
1 1 driver 15:00 15:30
1 2 walk 15:00 15:30
1 2 driver 22:00 8:30
1 3 passenger 15:00 15:30
1 3 walk 8:00 17:00
1 4 bus 17:00 24:00
1 4 passenger 15:00 15:30
1 4 walk 23:00 24:00
2 1 driver 8:00 10:00
2 1 driver 23:00 24:00
2 2 passenger 23:00 24:00
在第一个家庭中,第一和第二个人是司机,第三和第四个人是乘客,两个乘客的开始和结束时间由第一个司机匹配(15:00到15:30),因此我需要保留3行:(4,7,10)
第二家庭的司机和乘客也是匹配的。因此,输出为:
family persons mode start time end time
1 1 driver 15:00 15:30
1 3 passenger 15:00 15:30
1 4 passenger 15:00 15:30
2 1 drive 23:00 24:00
2 2 passenger 23:00 24:00
备注:第一组中的第二个人与乘客有相同的开始和结束时间,但她的模式是步行而不是驾驶,因此我们不需要该行一个选项是按“家庭”、“开始时间”、“结束时间”和
过滤大于1的行数进行分组
library(dplyr)
df1 %>%
group_by(family, starttime, endtime) %>%
filter(n() > 1)
# A tibble: 5 x 5
# Groups: family, starttime, endtime [2]
# family persons mode starttime endtime
# <int> <int> <chr> <chr> <chr>
#1 1 1 driver 15:00 15:30
#2 1 3 passenger 15:00 15:30
#3 1 4 passenger 15:00 15:30
#4 2 1 drive 23:00 24:00
#5 2 2 passenger 23:00 24:00
或者在base R
中,一个选项是使用duplicated
df1[duplicated(df1[c(1, 4, 5)])|duplicated(df1[c(1, 4, 5)], fromLast = TRUE),]
数据
df1一个选项是按“系列”、“开始时间”、“结束时间”和filter对大于1的行数进行分组
library(dplyr)
df1 %>%
group_by(family, starttime, endtime) %>%
filter(n() > 1)
# A tibble: 5 x 5
# Groups: family, starttime, endtime [2]
# family persons mode starttime endtime
# <int> <int> <chr> <chr> <chr>
#1 1 1 driver 15:00 15:30
#2 1 3 passenger 15:00 15:30
#3 1 4 passenger 15:00 15:30
#4 2 1 drive 23:00 24:00
#5 2 2 passenger 23:00 24:00
或者在base R
中,一个选项是使用duplicated
df1[duplicated(df1[c(1, 4, 5)])|duplicated(df1[c(1, 4, 5)], fromLast = TRUE),]
数据
df1它是如何意识到我在驾驶员和乘客模式下需要它的,而不是在步行模式下?@sherek_66。好的,在这种情况下,我们可以对过滤器进行更改,因为使用复制功能,我还可以获得其他模式。hi@sherek_66,如果您安装了dplyr
软件包,您只需执行?分组操作
,以了解有关该dplyr功能的更多信息。您还可以在堆栈中搜索[groupby][dplyr]
,这将显示使用此函数了解更多信息的其他示例。@sherek_66。我更新了答案。在这个例子中,其中一个名字是“drive”,而不是“driver”,拼写错误?它是如何意识到我在驾驶员和乘客模式下需要这个,而不是在步行模式下?@sherek_66。好的,在这种情况下,我们可以对过滤器进行更改,因为使用复制功能,我还可以获得其他模式。hi@sherek_66,如果您安装了dplyr
软件包,您只需执行?分组操作
,以了解有关该dplyr功能的更多信息。您还可以在堆栈中搜索[groupby][dplyr]
,这将显示使用此函数了解更多信息的其他示例。@sherek_66。我更新了答案。在本例中,其中一个名称是“drive”而不是“driver”,拼写错误?