我希望根据第2-4列中的数据创建一个新列,如果日期列在上一行之前或之后,则对其进行条件调整。我的数据如下:
date city1 city2 city3
2022-01-25 Paris London Berlin
2022-01-28 Paris London Berlin
2022-02-04 Paris London Berlin
2022-01-26 Paris London Berlin
2022-02-08 Paris London Berlin
2022-02-02 Paris London Berlin
2022-02-04 Paris London Berlin
2022-02-06 Paris London Berlin 预期的产出如下:
date city1 city2 city3 NewColumn
2022-01-25 Paris London Berlin Paris
2022-01-28 Paris London Berlin Paris
2022-02-04 Paris London Berlin Paris
2022-01-26 Paris London Berlin London
2022-02-08 Paris London Berlin London
2022-02-02 Paris London Berlin Berlin
2022-02-04 Paris London Berlin Berlin
2022-02-06 Paris London Berlin Berlin这就是我尝试过的:
for (i in 2:4){
new_data <- data %>% mutate(NewColumn = ifelse(
as.Date(date) > lag(as.Date(date)), data[,i], data[,i+1]))}但这只会产生:
date city1 city2 city3 NewColumn
2022-01-25 Paris London Berlin <NA>
2022-01-28 Paris London Berlin Berlin
2022-02-04 Paris London Berlin Berlin
2022-01-26 Paris London Berlin London
2022-02-08 Paris London Berlin London
2022-02-02 Paris London Berlin Berlin
2022-02-04 Paris London Berlin Berlin
2022-02-06 Paris London Berlin Berlin我怎么才能解决这个问题?有什么建议吗?
发布于 2022-08-14 10:43:22
使用dplyr.创建自定义组时,我们可以使用它将新值突变到列中。
library(dplyr)
df |>
group_by(grp = cumsum(c(1, diff(lubridate::ymd(date))) < 0) + 1) |>
rowwise() |>
mutate(NewColumn = c_across(city1:city3)[grp]) |>
ungroup() |> select(-grp) date city1 city2 city3 NewColumn
<chr> <chr> <chr> <chr> <chr>
1 2022-01-25 Paris London Berlin Paris
2 2022-01-28 Paris London Berlin Paris
3 2022-02-04 Paris London Berlin Paris
4 2022-01-26 Paris London Berlin London
5 2022-02-08 Paris London Berlin London
6 2022-02-02 Paris London Berlin Berlin
7 2022-02-04 Paris London Berlin Berlin
8 2022-02-06 Paris London Berlin Berlin发布于 2022-08-14 09:53:48
j <- 2
lag_d <- c(0 , df$date)
for(i in 1:(length(lag_d)-1)){
if(lag_d[i+1] > lag_d[i]) df$NewColumn[i] <- df[i,j]
else {
j <- j + 1
df$NewColumn[i] <- df[i,j]
}
} date city1 city2 city3 NewColumn
1 2022-01-25 Paris London Berlin Paris
2 2022-01-28 Paris London Berlin Paris
3 2022-02-04 Paris London Berlin Paris
4 2022-01-26 Paris London Berlin London
5 2022-02-08 Paris London Berlin London
6 2022-02-02 Paris London Berlin Berlin
7 2022-02-04 Paris London Berlin Berlin
8 2022-02-06 Paris London Berlin Berlinhttps://stackoverflow.com/questions/73350195
复制相似问题