【问题标题】:Count with conditional - dataframe使用条件计数 - 数据框
【发布时间】:2017-05-25 00:05:08
【问题描述】:

我想计算一个观察值出现了多少次,条件是一列大于另一列。

例如,只有当 B 列大于 C 列时,“A”、“B”和“C”才会出现多少次。

set.seed(20170524)

A <- rep(c("A","B","C"),5)
B <- round(runif(15,0,20),0)
C <- round(runif(15,1,5),0) + B
D <- as.data.frame(cbind(A,B,C))
D <- D[order(B),]

谢谢!

【问题讨论】:

  • 看起来C 总是大于BC &lt;- B + round(runif(15,1,5),0) 。或者我误解了什么

标签: r count conditional


【解决方案1】:
#firstly, those numbers got converted to factors, this is problematic.
D$B<-as.numeric(D$B)
D$C<-as.numeric(D$C)

#Then, get the counts for the A:
countA = sum(D$A=='A' & D$B < D$C)

同样适用于“B”和“C”

如果不仅仅是“A、B、C”类别,您可能希望为 by= 选项创建一个 data.table,但有人可能会说这太过分了。

【讨论】:

  • 将因子直接转换为数字将为您提供因子水平的索引,而不是实际值。必须先通过字符格式:D$B&lt;-as.numeric(as.character(D$B))
【解决方案2】:

您可以使用:table(D$A[which(D$B&gt;D$C)])

请注意,当您执行D &lt;- as.data.frame(cbind(A,B,C)) 时,您将得到factors,因此您可以在之后将BC 转换为数字变量,或者直接创建data.frame 而无需通过matrix

D &lt;- data.frame(A,B,C)

【讨论】:

    猜你喜欢
    • 2017-06-08
    • 2020-03-30
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多