R 使用指示符和列更改列的值
我有 如果他们的时间最多比汽车晚1小时,我需要改变公共汽车和汽车的时间。如果有多辆车可用,他们的时间将是最近的车 输出R 使用指示符和列更改列的值,r,dataframe,R,Dataframe,我有 如果他们的时间最多比汽车晚1小时,我需要改变公共汽车和汽车的时间。如果有多辆车可用,他们的时间将是最近的车 输出 household person mode time 1 1 car 8:00 1 2 car 9:00 1 3
household person mode time
1 1 car 8:00
1 2 car 9:00
1 3 bus 7:00
1 4 bus 7:30
1 4 walk 8:30
1 5 car 10:00
2 1 car 9:00
2 2 bus 11:00
在第一个家庭中,3人和4人与第一个司机的时间比较近。这里有一个
tidyverse
+lubridate
选项
household person mode time
1 1 car 8:00
1 2 car 9:00
1 3 bus 8:00
1 4 bus 8:00
1 5 walk 9:00
1 6 car 10:00
2 1 car 9:00
2 2 bus 11:00
库(lubridate)
图书馆(tidyverse)
df%>%
组别(住户)%>%
变异(时间=如果其他(
%c(“公共汽车”、“步行”)中的模式%&
hm(时间)
说明:这是对您情况的直译。我们将家庭分组,如果模式为“公共汽车”或“步行”,并且他们的时间比“汽车”的时间晚1小时或更少,则修改时间.在这个数据中,
人
和家庭
数字也不重要吗?按家庭分组的数据,所以在每个家庭中,我想进行比较,但是人
不重要吗?不,不重要,我的时间格式是“%H:%M:%S”,可能是因为这个错误吗?@shere好的,是的,这会有区别。尝试替换hms
用于hm
。仍然错误:错误:true
的长度必须为6(条件的长度)或1,而不是4调用rlang::last_error()
要查看回溯问题是我每个家庭都有超过一个人拥有mode car,你能修复它吗?@shere修复你的帖子!到目前为止,通过评论我们发现,(1)你想按“家庭”分组,(2)“人”是不相关的,(3)你的时间格式实际上是HH:MM:SS,而不是样本数据中的HH:MM,以及(4)每个“家庭”有多个“汽车”条目。所有这些都属于你的主要帖子!你看到问题了吗?
library(lubridate)
library(tidyverse)
df %>%
group_by(household) %>%
mutate(time = if_else(
mode %in% c("bus", "walk") &
hm(time) < hm(time)[mode == "car"] &
as.numeric(hm(time) - hm(time)[mode == "car"]) / 3600 <= 1,
time[mode == "car"], time)) %>%
ungroup()
## A tibble: 6 x 4
# household person mode time
# <int> <int> <fct> <fct>
#1 1 1 car 8:00
#2 1 2 bus 8:00
#3 1 3 bus 8:00
#4 1 4 walk 8:30
#5 2 1 car 9:00
#6 2 2 bus 11:00