【问题标题】:Tables and bins from two vectors in RR中两个向量的表和bin
【发布时间】:2020-10-25 09:22:53
【问题描述】:

作为一个练习,我从一个名为 u 和 v 的种子中获得了两个样本,并要求我显示有多少值在 v 中但在 u 中没有落入垃圾箱 [1,50] 和 [51,100]。然后我被要求添加一行代码以使用关系运算符(如 >)和sum() 来确认我的答案。

我解决了第一部分:

table(findInterval(setdiff(v,u),c(50))

但是对于第二部分,我真的没有得到我需要做的事情;任何帮助表示赞赏!

例子:

set.seed(1201)
u = sample(100,100,replace=TRUE)
v = sample(100,100,replace=TRUE)
table(findInterval(setdiff(v,u),c(50)))

输出:

0  1 
12 12 

【问题讨论】:

  • 请查看编辑
  • 所以您想要>sum 的答案?
  • 或许sum(findInterval(setdiff(v,u),c(50)) > 0)
  • 它只返回12,你能解释一下输出的含义和你做了什么吗?谢谢
  • 通过使用setdiff,返回向量将是唯一的,即如果有重复,它将被丢弃。那是你想要的吗?即如果你用!%in%,它返回一个不同的值table(findInterval(v[!v %in% u], 50))

标签: r list dataframe vector


【解决方案1】:

如果我们要使用比较运算符和sum,创建一个逻辑向量,得到逻辑向量的sum

i1 <- v[!v %in% u]  > 50
sum(i1)
sum(!i1)

注意:如果 OP 打算仅使用 unique 值(如 setdiff),则获取 unique

i1 <- unique(v[!v %in% u]) > 50
out1 <- sum(i1)
out2 <- sum(!i1)

-检查table的输出

tbl1 <- table(findInterval(setdiff(v,u),c(50)))
all.equal(as.numeric(tbl1), c(out1, out2), check.attributes = FALSE)
#[1] TRUE
 

【讨论】:

    【解决方案2】:

    由于您只有一个数字要削减间隔,因此您可以直接使用&gt; 验证您的答案。

    这是你的代码

    set.seed(1201)
    u = sample(100,100,replace=TRUE)
    v = sample(100,100,replace=TRUE)
    table(findInterval(setdiff(v,u),50))
    
    #0 1 
    #9 9
    

    没有findInterval

    table(setdiff(v,u) > 50)
    
    #FALSE  TRUE 
    #    9     9 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      • 2022-12-12
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 2015-10-12
      相关资源
      最近更新 更多