简体   繁体   English

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

[英]change value column dataframe in r based on conditions

I have a column like this:我有一个这样的专栏:

weekday工作日
1 1
5 5
3 3
6 6
... ...

I want to update these values in this way:我想以这种方式更新这些值:

  • 1 -> 7 1 -> 7
  • 2 -> 1 2 -> 1
  • 3 -> 2 3 -> 2
  • 4 -> 3 4 -> 3
  • 5 -> 4 5 -> 4
  • 6 -> 7 6 -> 7
  • 7 -> 6 7 -> 6

I've tried:我试过了:

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 

But in this way when I update a value than the others change obviously.但是这样当我更新一个值时,其他值会明显改变。

我们可以在base R做到这一点

df$TIC_DATE_WEEKDAY <- setNames(1:7, c(7, 1, 2, 3, 4, 7, 6))[as.character(df$weekday)]

您可以使用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)

Maybe you can try this也许你可以试试这个

# 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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM