R:根据来自不同数据帧的条件计算数据帧中的行数

时间:2016-11-18 00:02:40

标签: r

所以我有两个数据帧 -

person.data

person_id  |  date  | present_absent
1             12/9    p
2             12/9    a
3             12/9    p
1             20/9    a
2             20/9    a
3             20/9    a
...

daily.data

date  | week_code |  absence_count
12/9    A
20/9    B
...

我需要在daily.data框架中为每个日期计算出多少' a'代码记录在person.data框架中,并将结果记录在daily.data框架的absence_count列中。

问题的一部分是我不知道如何正确地说出问题而不举一个例子。我最近4个小时的google和stackoverflow搜索向我展示了如何计算' a'使用以下代码表示特定日期:

sum(person.data$date == 12/9 & person.data$present_absent == "a")

但是我无法弄清楚如何将person.data $ date与每个daily.data $ date进行比较。我可以依靠Excel并使用COUNTIFS()公式,但我真的想了解R.

提前感谢任何帮助都会受到极大的欢迎。

2 个答案:

答案 0 :(得分:2)

您可以在R。

中使用聚合和%in%函数
# Your first dataset
person.data <- data.frame("persion_id" = c(1,2,3,1,2,3),
                      "date" = c("12/9", "12/9", "12/9","20/9", "20/9", "20/9"),
                      "present_absent" = c("p", "a", "p", "a", "a", "a"))

# Your second dataset you want to populate
daily.data <- data.frame("date" = c("12/9", "20/9"),
                     "week_code" = c("A", "B"))

# Summarize the attendance for all dates
summary <- aggregate(as.integer(person.data$present_absent),
              by = list(person.data$date, person.data$present_absent), FUN = sum)

# Get only the absent records from summary
daily.data$absence_count <- summary[(daily.data$date %in% person.data$date &
                                   summary[,2] == "a"), 3]

答案 1 :(得分:0)

(into {} (for [[k v] eval-result] [(keyword k) v])) 解决方案:

dplyr