【问题标题】:How to code in R like do looping and find maximum from SAS如何在 R 中像循环一样编码并从 SAS 中找到最大值
【发布时间】:2022-11-25 05:52:57
【问题描述】:

好像和我之前的问题一样。但是这个是从 do 循环中寻找最大值。 我不知道在 R 中该怎么做。 但是 SAS 中的代码如下:

data cek3;set cek;
do i = 1 to length(delq12);
X = substr(delq12,i,1);
if X in ('Z','B','1') then X = '0';
Y = put(X,2.);
MAX_DELQ = max(MAX_DELQ,Y);
end;
MAX_DELQ = max(MAX_DELQ-1,0);
run;

我有数据

delq12 <- c('ZZZZZZBZZZZZ','Z1ZZZZZZZZZZ','ZZ2ZZZZ22ZZZ','ZZZ3ZZ4ZZZZ0')

我期望的答案是这样的(这是来自 SAS 的答案):

先感谢您

【问题讨论】:

  • sapply(stringr::str_split(delq12,""), function(x) max(as.numeric(x), na.rm=TRUE)-1)[1] -Inf 0 1 3怎么样。您可以修改该函数以避免出现有关 NAs 的警告消息,并且不会向 max 发送非缺失参数,并在这些情况下返回 NA0

标签: r sas max


【解决方案1】:

您可以使用 strsplit() 将向量拆分为字符向量列表。然后使用 sapply 应用一个函数来获取最大值并返回结果向量。

在函数中,我使用 x[grepl( '^\d+$', x) ] 删除非数字字符以避免在应用 as.numeric() 之前出现警告。然后使用 c()0 连接避免了有关仅使用 NAs 获取向量的 max 的警告(如果原始字符串中没有数字)。

所以代码是:

max_delq <- delq12 |>
    strsplit('') |>
    sapply( (x) { max( c( as.numeric( x[grepl( '^\d+$', x) ] ) - 1, 0) ) } )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-30
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    相关资源
    最近更新 更多