【问题标题】:R: Vector of sums with conditions from different data framesR:具有来自不同数据帧的条件的总和向量
【发布时间】:2019-12-05 12:54:22
【问题描述】:

如果来自同一 df 的另一列的值与来自不同 df 的列的值相等或大于我实际想要写向量。

我有这样的事情

DF1$A <- c( 0.12 , 0.29, 0.36, 0.55)  
DF2
x <- c(0,0,1,0,1,0,1,0,0,1)
y <- c(0.11, 0.55, 0.23,0.33,0.59,0.66,0.88,0.11,0.05,0.90)

我想做一个向量 DF1$B

DF1B<- sum(DF2$Y >= DF1$A & DF2$X == 1)

问题是我得到一个值的向量,并且我希望向量的每个值根据也是向量的条件而有所不同。

另外,我正在接受这个按摩 l

较长的对象长度不是较短对象长度的倍数。

【问题讨论】:

  • 只需在控制台中尝试一下,您就会看到自己... c(1:4) >= c(1:10),您必须关心您正在比较的内容,长度很重要。

标签: r vector


【解决方案1】:

1 和 0 用作逻辑值,因此以逻辑术语给出数字向量位置只会采用与 TRUE1 位置相对应的元素。

as.logical(x)
# FALSE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE

y[as.logical(x)]
# 0.23 0.59 0.88 0.90

sum(y[as.logical(x)])
# 2.6

【讨论】:

    【解决方案2】:

    只需阅读警告消息并在控制台中尝试一下,您就会看到自己......

    c(1:4) >= c(1:10)
     [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
    Warning message:
    In c(1:4) >= c(1:10) :
      longer object length is not a multiple of shorter object length
    

    你必须关心你在比较什么,长度很重要。

    这应该没问题...

    c(1:4) >= c(1:4)
    

    这样应该也可以

    c(1:4) >= c(1:8)
    

    c(c(1:4),c(1:4)) >= c(1:4)
    

    有时您想将一行与多行进行比较,期望行的长度相同。所以这就是你看到这个警告的原因。 长度很重要,在您的情况下,较长的长度不是较短对象长度的倍数。

    顺便说一句

    与长度相关的命令是 length 用于向量和列表,nrowncoldim 用于像对象这样的表格。

    【讨论】:

    • 我怎样才能得到一个向量的长度?
    猜你喜欢
    • 2018-12-26
    • 2013-02-09
    • 2018-06-26
    • 2015-09-06
    • 2020-07-22
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多