对于第一个向量的每个非缺失元素,请与第二个向量的滞后元素进行比较

时间:2020-09-06 17:53:18

标签: r

我确信我的解决方案(请参阅“期望的结果”)极大地使问题复杂化了。我有两个向量-向量1表示开始,向量2表示度量的结束。不适用,未记录任何更改。

我要检查是否有奇怪的数据条目-即,某些内容尚未开始。我只想要看似合理的数据条目。一个小节可以在下一个小节开始时同时结束(例如,请参见示例中的小节“ C”)。

我的方法: 我使用cumsum为起始向量中的每个新非缺失元素创建剪切,并为每个剪切检查是否有多个“结束”条目,并在有非NA条目时删除NA​​。 这个想法是获得一个具有唯一最终值或NA的向量,我可以将其与起始向量的唯一元素进行比较。所得的逻辑向量用于子集起始列表。

其他可能相关的信息: 这两个向量实际上是数据帧的列。欢迎任何包裹。

此外,如果您有更好的标题建议,我也很乐意听。干杯。

start_r <- c("A", NA, NA, "B", NA, NA, "C", NA, NA, "D", NA, "D")
end_r   <- c(NA, "A", NA, NA, "B", "C", NA, NA, NA, "C", NA, NA)

## as suggested by Henrik, here as data frame. 
## "B" has two following entries in column "end_r" and is therefore not plausible
data.frame(start_r, end_r)
#>    start_r end_r
#> 1        A  <NA>
#> 2     <NA>     A
#> 3     <NA>  <NA>
#> 4        B  <NA>
#> 5     <NA>     B
#> 6     <NA>     C
#> 7        C  <NA>
#> 8     <NA>  <NA>
#> 9     <NA>  <NA>
#> 10       D     C
#> 11    <NA>  <NA>
#> 12       D  <NA>

end_lag <- dplyr::lead(end_r)
cs1 <- cumsum(!is.na(start_r))

ls_start <- split(start_r, cs1)

ls_end_lagged <- split(end_lag, cs1)
ls_end_nona <- lapply(ls_end_lagged, 
                        function(x) if(all(is.na(unique(x)))) NA 
                                      else if (length(unique(x[!is.na(x)])) >1) NA
                                        else x[!is.na(x)]
                      )

v_start <- sapply(split(start_r, cs1), function(x) x[!is.na(x)])
v2 <- sapply(ls_end_nona, function(x) x[1])

## desired result
data.frame(start_r = unname(unlist(ls_start[v_start %in% v2])))
#>   start_r
#> 1       A
#> 2    <NA>
#> 3    <NA>
#> 4       C
#> 5    <NA>
#> 6    <NA>

1 个答案:

答案 0 :(得分:1)

'v1'也可以使用

创建
library(dplyr)
v2 <- stack(ls_end_lagged) %>%
      group_by(ind) %>%
      summarise(values = 
    if(all(is.na(values))| n_distinct(na.omit(values)) > 1 ) NA else 
       first(na.omit(values)) ) %>% 
    pull(values)

对于其他情况

unlist(ls_start[v1 %in% v2], use.names = FALSE)
#[1] "A" NA  NA  "C" NA  NA 

-检查输出

tidyverse

或者另一种选择是使用library(dplyr) library(tibble) tibble(start = start_r, end = lead(end_r)) %>% group_by(grp = cumsum(!is.na(start))) %>% summarise(across(everything(), ~ if(all(is.na(.)) | n_distinct(na.omit(.)) > 1) NA_character_ else first(na.omit(.))), .groups = 'drop') %>% select(-grp)

const Discord = require('discord.js');
const fs = require('fs');

module.exports = {
    name: 'createfile',
    description: "The bot will create a .json file named after the argument",
    execute(message, args){
        var fileName = args[0]
        if(!args) {
            return message.reply('invalid name')
        };
        
        let jsonFile = { 
          fileName: fileName
        };
 
        let data = JSON.stringify(jsonFile);
        fs.writeFileSync(`${fileName}.json`, data);
    }
}