【问题标题】:For each value in a column count occurrences of that value in another column对于列中的每个值,计算该值在另一列中的出现次数
【发布时间】:2018-10-15 10:58:19
【问题描述】:

我有一个简单但大的数据框 (lateness_tbl),由三列 (Days、Due_Date、End_Date) 组成。我需要查看每个截止日期在结束日期中匹配的次数。我目前正在做这样的事情:

x <- c()
for (i in 1:length(lateness_tbl$Due_Date){
    x[i] <- sum(lateness_tbl$Due_Date[i] == lateness_tbl$End_Date)}

唯一的问题是我有超过 200 万条记录要比较,我正在寻求社区的帮助以加快速度。任何提示、技巧或更正都会很棒。谢谢

【问题讨论】:

  • R 是一种免费的开源编程语言和软件环境,用于统计计算、生物信息学、可视化和通用计算。 为您的问题提供最少的、可重复的、有代表性的示例。对数据使用 dput() 并通过库调用指定所有非基础包。 不要为数据或代码嵌入图片,使用缩进的代码块。对于统计问题,请使用 stackexchange.com
  • 试试apply(as.matrix(lateness_tbl$Due_Date,ncol=1),1,function(x){sum(x==lateness_tbl$End_Date)})

标签: r for-loop sum compare matching


【解决方案1】:

有一个简单的解决方案。您可以定义一个新向量来存储 EndDate 和 DueDate 之间的差异,然后计算该向量上等于 0 的条目。

differences <- lateness_tbl$Due_Date - lateness_tbl$End_Date
length(which(differences == 0))

如果Due_dateEnd_Date 是数据(而不是整数),您可以使用difftime 函数,如here 所示,并使用上述相同的策略。

【讨论】:

    猜你喜欢
    • 2020-10-09
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多