首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套在群中的条件

嵌套在群中的条件
EN

Stack Overflow用户
提问于 2018-10-25 06:34:22
回答 1查看 27关注 0票数 0

我正在处理这样的一些数据:

代码语言:javascript
复制
ID    Count  Report  Rank   
X-01   1      4.2     2 
X-01   2      2.7     1     
X-01   3      5.8     3 
X-01   4      14      5 
X-01   5      9.2     4
X-02   1      6.8     2 
X-02   2      17      4     
X-02   3      13      3 
X-02   4      22.7    5 
X-02   5      4       1

计数是指当传感器被触发时,报表是值,等级是报表中的排名。

我对其中的6个变量感兴趣:

代码语言:javascript
复制
If Count = 1 and Rank = 1 then Report
If Count = 1 and Rank = 2 then Report
If Count > 1 and Rank = 1 or 2, then -1
If Count = 1 and Rank = 3:5, -Report
If Count >= 2 and Rank = 3:10, 1
If Rank > 5 (there are multiple rows to each ID), 0

我已经尝试过if (x) {} etc () {} etc和ifelse()与多个嵌套,但我得到了很多红色的文本回来!

代码语言:javascript
复制
Larger object length is not a multiple of shorter object length 

经常发生。

到目前为止,我找到的唯一解决方案是通过'ifelse‘计算列中的每个行,然后将行加到一个新的列中,这很费时,而且不优雅。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-25 07:14:42

您可以编写一个函数,指定给定每个输入组合的输出。

代码语言:javascript
复制
f1 <- function(count, rank, report){

  # in case of missing count or rank data:
  if (is.na(count) | is.na(rank)) return(NA)
  if (count==1 & rank %in% 1:2) return(report)
  if (count > 1 & rank %in% 1:2) return(-1)
  if (count==1 & rank %in% 3:5) return(-report)
  if (count >= 2 & rank %in% 3:10) return(1)
  if (rank > 5) return(0)
  return(NA)
}

接下来,可以使用mapply将此函数应用于data.frame。

代码语言:javascript
复制
mapply(f1, count=d$Count, rank=d$Rank, report=d$Report)
[1]  4.2 -1.0  1.0  1.0  1.0  6.8  1.0  1.0  1.0 -1.0

编辑:我更新了函数,如果一些输入变量是NA,它将返回NA

鉴于这一数据集:

代码语言:javascript
复制
d <- read.table(text='ID    Count  Report  Rank   
                      X-01   1      4.2     2 
                      X-01   2      2.7     1     
                      X-01   3      5.8     3 
                      X-01  NA      4       2
                      X-01   2      5.5     NA
                      X-01   4      14      5 
                      X-01   5      9.2     4
                      X-02   1      6.8     2 
                      X-02   2      17      4     
                      X-02   3      13      3 
                      X-02   4      22.7    5 
                      X-02   5      4       1', header=T)

我得到了这个输出:

代码语言:javascript
复制
mapply(f1, count=d$Count, rank=d$Rank, report=d$Report)
[1]  4.2 -1.0  1.0   NA   NA  1.0  1.0  6.8  1.0  1.0  1.0 -1.0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52982778

复制
相关文章

相似问题

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