我有一个这样的专栏:
工作日 |
---|
1 |
5 |
3 |
6 |
... |
我想以这种方式更新这些值:
我试过了:
df$weekday[df$weekday == 1] <- 7
df$weekday[df$weekday == 2] <- 1
df$weekday[df$weekday == 3] <- 2
df$TIC_DATE_WEEKDAY[df$weekday == 4] <- 3
df$TIC_DATE_WEEKDAY[df$weekday == 5] <- 4
df$TIC_DATE_WEEKDAY[df$weekday == 6] <- 5
df$TIC_DATE_WEEKDAY[df$weekday == 7] <- 6
但是这样当我更新一个值时,其他值会明显改变。
答案 0 :(得分:3)
我们可以在 base R
df$TIC_DATE_WEEKDAY <- setNames(1:7, c(7, 1, 2, 3, 4, 7, 6))[as.character(df$weekday)]
答案 1 :(得分:2)
您可以使用 dplyr::recode
-
df_7_tic_clean_final$TIC_DATE_WEEKDAY <- dplyr::recode(df_7_tic_clean_final$TIC_DATE_WEEKDAY, `1` = 7, `2` = 1, `3` = 2, `4` = 3, `5` = 4, `6` = 7, `7` = 6)
答案 2 :(得分:2)
也许你可以试试这个
# lookup table
> v <- 1:7
> lut <- c(tail(v, 1), head(v, -1))
# dummy data
> x <- c(1, 2, 5, 3, 4, 2, 7)
# mapping from `lut` and `v`
> lut[match(x, v)]
[1] 7 1 4 2 3 1 6