[英]change value column dataframe in r based on conditions
I have a column like this:我有一个这样的专栏:
weekday![]() |
---|
1 ![]() |
5 ![]() |
3 ![]() |
6 ![]() |
... ![]() |
I want to update these values in this way:我想以这种方式更新这些值:
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.