首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更新比前一行小的矩阵列中的值

更新比前一行小的矩阵列中的值
EN

Stack Overflow用户
提问于 2021-09-20 22:02:42
回答 1查看 24关注 0票数 0

我有以下矩阵:

代码语言:javascript
运行
复制
> dput(result)
structure(list(X.22.May.2021. = c("22-May-2021", "29-May-2021", 
"05-Jun-2021", "12-Jun-2021", "19-Jun-2021", "26-Jun-2021", "03-Jul-2021", 
"10-Jul-2021", "17-Jul-2021", "24-Jul-2021", "31-Jul-2021", "07-Aug-2021", 
"14-Aug-2021", "21-Aug-2021", "28-Aug-2021", "04-Sep-2021", "11-Sep-2021", 
"18-Sep-2021", "25-Sep-2021", "02-Oct-2021", "09-Oct-2021", "16-Oct-2021", 
"23-Oct-2021", "30-Oct-2021", "06-Nov-2021", "13-Nov-2021", "20-Nov-2021", 
"27-Nov-2021", "04-Dec-2021", "11-Dec-2021", "18-Dec-2021", "25-Dec-2021", 
"01-Jan-2022", "08-Jan-2022", "15-Jan-2022", "22-Jan-2022", "29-Jan-2022", 
"05-Feb-2022", "12-Feb-2022", "19-Feb-2022", "26-Feb-2022", "05-Mar-2022", 
"12-Mar-2022", "19-Mar-2022", "26-Mar-2022", "02-Apr-2022", "09-Apr-2022", 
"16-Apr-2022", "23-Apr-2022", "30-Apr-2022", "07-May-2022", "14-May-2022", 
"21-May-2022", "28-May-2022", "04-Jun-2022", "11-Jun-2022", "18-Jun-2022", 
"25-Jun-2022", "02-Jul-2022", "09-Jul-2022", "16-Jul-2022", "23-Jul-2022", 
"30-Jul-2022", "06-Aug-2022", "13-Aug-2022", "20-Aug-2022", "27-Aug-2022", 
"03-Sep-2022", "10-Sep-2022", "17-Sep-2022", "24-Sep-2022", "01-Oct-2022", 
"08-Oct-2022", "15-Oct-2022", "22-Oct-2022", "29-Oct-2022", "05-Nov-2022", 
"12-Nov-2022", "19-Nov-2022", "26-Nov-2022", "03-Dec-2022", "10-Dec-2022", 
"17-Dec-2022", "24-Dec-2022", "31-Dec-2022", "07-Jan-2023", "14-Jan-2023", 
"21-Jan-2023", "28-Jan-2023", "04-Feb-2023", "11-Feb-2023", "18-Feb-2023", 
"25-Feb-2023", "04-Mar-2023", "11-Mar-2023", "18-Mar-2023", "25-Mar-2023", 
"01-Apr-2023", "08-Apr-2023", "15-Apr-2023", "22-Apr-2023"), 
    X.0. = c("0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
    "0", "0", "0", "1", "2", "3", "4", "5", "5", "5", "5", "5", 
    "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", 
    "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", 
    "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", 
    "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", 
    "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", 
    "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", 
    "5", "0", "0", "0", "0", "0", "0"), X.0..1 = c("0", "0", 
    "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
    "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
    "0", "0", "0", "0", "0", "0", "0", "0", "0", "2", "6", "6", 
    "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", 
    "6", "6", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", 
    "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", 
    "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", 
    "7", "7", "7", "7", "7", "0", "0", "0", "0", "0", "0", "0", 
    "0", "0", "0"), X.0..2 = c("0", "0", "0", "0", "0", "0", 
    "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
    "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
    "0", "0", "0", "0", "0", "2", "6", "6", "6", "6", "6", "6", 
    "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "7", "7", 
    "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", 
    "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", 
    "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", 
    "7", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"), X.0..3 = c("0", 
    "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
    "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
    "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "2", "6", 
    "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", 
    "6", "6", "6", "7", "7", "7", "7", "7", "7", "7", "7", "7", 
    "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", 
    "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", 
    "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", "7", 
    "7", "7", "7", "7"), X.0..4 = c("0", "0", "0", "0", "0", 
    "0", "0", "1", "1", "2", "2", "3", "3", "4", "5", "6", "7", 
    "9", "11", "14", "16", "19", "22", "25", "29", "33", "37", 
    "41", "45", "50", "53", "58", "62", "67", "71", "76", "81", 
    "86", "90", "95", "99", "104", "109", "114", "118", "123", 
    "128", "133", "137", "142", "147", "153", "157", "162", "166", 
    "172", "176", "181", "185", "190", "195", "199", "204", "209", 
    "213", "218", "223", "227", "232", "237", "242", "246", "251", 
    "256", "261", "266", "270", "276", "280", "284", "289", "294", 
    "299", "300", "300", "300", "300", "300", "300", "300", "300", 
    "300", "300", "0", "0", "0", "0", "0", "0", "0", "0"), X.0..5 = c("0", 
    "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
    "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
    "0", "0", "1", "2", "3", "4", "5", "7", "9", "11", "11", 
    "11", "13", "16", "19", "24", "29", "34", "39", "45", "51", 
    "57", "65", "72", "80", "87", "87", "90", "97", "106", "113", 
    "121", "129", "135", "143", "153", "161", "170", "175", "184", 
    "192", "199", "203", "206", "211", "216", "225", "230", "238", 
    "246", "254", "262", "271", "280", "288", "297", "300", "300", 
    "300", "300", "300", "300", "300", "300", "300", "300", "0", 
    "0", "0", "0", "0", "0", "0", "0", "0", "0"), X.0..6 = c("0", 
    "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
    "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
    "0", "0", "1", "2", "3", "4", "5", "7", "9", "11", "11", 
    "11", "13", "16", "19", "24", "29", "34", "39", "45", "50", 
    "56", "62", "69", "77", "84", "84", "87", "95", "103", "109", 
    "117", "125", "132", "141", "148", "157", "166", "172", "180", 
    "188", "195", "198", "201", "206", "212", "220", "226", "235", 
    "244", "252", "261", "270", "279", "288", "297", "300", "300", 
    "300", "300", "300", "300", "300", "0", "0", "0", "0", "0", 
    "0", "0", "0", "0", "0", "0", "0", "0"), X.0..7 = c("0", 
    "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
    "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
    "0", "0", "1", "2", "3", "4", "6", "7", "9", "11", "11", 
    "11", "13", "16", "20", "24", "28", "33", "38", "42", "48", 
    "54", "59", "66", "72", "78", "78", "80", "86", "93", "99", 
    "105", "112", "117", "124", "130", "137", "144", "149", "155", 
    "160", "166", "169", "171", "174", "178", "184", "189", "196", 
    "203", "210", "217", "224", "230", "237", "244", "250", "256", 
    "261", "268", "276", "281", "288", "288", "290", "297", "300", 
    "300", "300", "300", "300", "300", "300", "300", "300", "0"
    )), row.names = c(NA, -101L), class = "data.frame")
> result[85:100,]
    X.22.May.2021. X.0. X.0..1 X.0..2 X.0..3 X.0..4 X.0..5 X.0..6 X.0..7
85     31-Dec-2022    5      7      7      7    300    300    300    268
86     07-Jan-2023    5      7      7      7    300    300    300    276
87     14-Jan-2023    5      7      7      7    300    300    300    281
88     21-Jan-2023    5      7      7      7    300    300    300    288
89     28-Jan-2023    5      7      7      7    300    300      0    288
90     04-Feb-2023    5      7      7      7    300    300      0    290
91     11-Feb-2023    5      7      7      7    300    300      0    297
92     18-Feb-2023    5      0      0      7    300      0      0    300
93     25-Feb-2023    5      0      0      7    300      0      0    300
94     04-Mar-2023    5      0      0      7      0      0      0    300
95     11-Mar-2023    5      0      0      7      0      0      0    300
96     18-Mar-2023    0      0      0      7      0      0      0    300
97     25-Mar-2023    0      0      0      7      0      0      0    300
98     01-Apr-2023    0      0      0      7      0      0      0    300
99     08-Apr-2023    0      0      0      7      0      0      0    300
100    15-Apr-2023    0      0      0      7      0      0      0    300

我正在尝试更新列,以便对于整数后为零的日期,我希望该值反映整数。例如:

代码语言:javascript
运行
复制
> tail(result)
    X.22.May.2021. X.0. X.0..1 X.0..2 X.0..3 X.0..4 X.0..5 X.0..6 X.0..7
96     18-Mar-2023    5      7      7      7    300    300    300    300
97     25-Mar-2023    5      7      7      7    300    300    300    300
98     01-Apr-2023    5      7      7      7    300    300    300    300
99     08-Apr-2023    5      7      7      7    300    300    300    300
100    15-Apr-2023    5      7      7      7    300    300    300    300
101    22-Apr-2023    5      7      7      7    300    300    300    300

我尝试在下面的语句中使用shift将一个值与前一行进行比较,但是update不工作,尽管我没有得到任何错误。

代码语言:javascript
运行
复制
> result <- result %>% mutate(result, across(2:9, ~ if_else(. < shift(.) & shift(.) != 0, max(.), .)))
> result[85:100,]
    X.22.May.2021. X.0. X.0..1 X.0..2 X.0..3 X.0..4 X.0..5 X.0..6 X.0..7
85     31-Dec-2022    5      7      7      7    300    300    300    268
86     07-Jan-2023    5      7      7      7    300    300    300    276
87     14-Jan-2023    5      7      7      7    300    300    300    281
88     21-Jan-2023    5      7      7      7    300    300    300    288
89     28-Jan-2023    5      7      7      7    300    300     95    288
90     04-Feb-2023    5      7      7      7    300    300      0    290
91     11-Feb-2023    5      7      7      7    300    300      0    297
92     18-Feb-2023    5      7      7      7    300     97      0    300
93     25-Feb-2023    5      0      0      7    300      0      0    300
94     04-Mar-2023    5      0      0      7     99      0      0    300
95     11-Mar-2023    5      0      0      7      0      0      0    300
96     18-Mar-2023    5      0      0      7      0      0      0    300
97     25-Mar-2023    0      0      0      7      0      0      0    300
98     01-Apr-2023    0      0      0      7      0      0      0    300
99     08-Apr-2023    0      0      0      7      0      0      0    300
100    15-Apr-2023    0      0      0      7      0      0      0    300

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2021-09-20 22:04:09

将0改为NA后,即可使用fill

代码语言:javascript
运行
复制
library(dplyr)
library(tidyr)
result1 <- result %>%
     mutate(across(2:9, na_if, 0)) %>% 
     fill(everything(), .direction = "down")

也可以是cummax

代码语言:javascript
运行
复制
result1 <- result %>% 
     mutate(across(2:9, cummax))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69261317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档