首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据r中的条件使用Map函数获取NA列表

根据r中的条件使用Map函数获取NA列表
EN

Stack Overflow用户
提问于 2020-09-08 01:02:35
回答 1查看 42关注 0票数 1

我有一个这样的数据集:

代码语言:javascript
运行
复制
library(data.table)
library(EnvStats)

DT <- data.table(MEAN = c(0.5,0.7,0.9,0.8),MIN = c(0.4,0.6,0.8,0.8),MAX = c(0.6,0.8,1,0.8),REF = rnorm(4,1000,200))

我计算了一个var,其中包含来自var MEANMINMAX的模拟值的列表,但如果是MEAN <= MINMEAN >= MAX,则需要返回NA值。如下所示:

代码语言:javascript
运行
复制
DT[, Sim_rtri := Map(function(w, x, y, z) ifelse(z <= x | z >= y,NA,w*(1+rtri(n = 10000,min = x,max = 
y,mode = z))), REF, MIN, MAX, MEAN)]

但我得到的输出在所有情况下都只有一个值。如下所示:

代码语言:javascript
运行
复制
 DT
    MEAN MIN MAX       REF Sim_rtri
 1:  0.5 0.4 0.6 1274.1917 1957.572
 2:  0.7 0.6 0.8  887.0604 1503.418
 3:  0.9 0.8 1.0 1072.6257 2011.683
 4:  0.8 0.8 0.8 1126.5725       NA

相反,我想要的输出是:

代码语言:javascript
运行
复制
DT
    MEAN MIN MAX       REF                                                Sim_rtri
 1:  0.5 0.4 0.6 1274.1917 1946.223,1849.996,1933.170,1940.845,1905.784,1943.204,...
 2:  0.7 0.6 0.8  887.0604 1512.938,1530.315,1480.203,1542.298,1500.740,1513.961,...
 3:  0.9 0.8 1.0 1072.6257 2055.113,2085.123,1991.335,2022.209,2010.288,1984.313,...
 4:  0.8 0.8 0.8 1126.5725 NA, NA, NA, NA, NA,....

我怎么才能得到这个呢?

EN

Stack Overflow用户

回答已采纳

发布于 2020-09-08 05:58:58

在这里,我们需要if/else而不是ifelse,因为ifelse要求所有参数的长度相同,rtri n显然很大,并且与test向量的长度不同,因为我们在每一行上循环时,length向量的长度为1

代码语言:javascript
运行
复制
DT[, Sim_rtri := Map(function(w, x, y, z) if(z <= x | z >= y) NA 
            else(w*(1+rtri(n = 10000,min = x,max = 
 y,mode = z))), REF, MIN, MAX, MEAN)]
DT
#   MEAN MIN MAX      REF                                                  Sim_rtri
#1:  0.5 0.4 0.6 1292.650 1894.088,1943.958,1935.992,1881.802,1918.530,1975.114,...
#2:  0.7 0.6 0.8 1037.545 1817.918,1742.029,1719.068,1753.283,1786.834,1803.231,...
#3:  0.9 0.8 1.0 1204.405 2327.954,2306.122,2198.317,2223.934,2235.752,2328.857,...
#4:  0.8 0.8 0.8  881.633                                                        NA

此外,如果我们需要n NAs,只需在if中复制NA即可

代码语言:javascript
运行
复制
if(z <= x | z >= y) rep(NA, 10000)
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63781614

复制
相关文章

相似问题

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