根据条件更改 r 中的值列数据框

时间:2021-07-22 14:07:22

标签: r

我有一个这样的专栏:

<头>
工作日
1
5
3
6
...

我想以这种方式更新这些值:

  • 1 -> 7
  • 2 -> 1
  • 3 -> 2
  • 4 -> 3
  • 5 -> 4
  • 6 -> 7
  • 7 -> 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 

但是这样当我更新一个值时,其他值会明显改变。

3 个答案:

答案 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