2016-11-18 5 views
0

Also ich habe zwei Datenrahmen -R: Count Zeilen in Datenrahmen basierend auf Kriterien aus einem anderen Datenrahmen

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 
... 

Ich muss arbeiten für jedes Datum im daily.data-Rahmen aus, wie viele "a" -Codes im Rahmen person.data aufgezeichnet sind, und notieren Sie das Ergebnis in der Spalte abwesenheit_des Rahmens daily.data.

Ein Teil des Problems ist, ich weiß nicht, wie man die Frage richtig formulieren kann, ohne ein Beispiel zu zeichnen. Meine letzten 4 Stunden von Google und Stackoverflow sucht haben mir gezeigt, wie man für ein bestimmtes Datum, die Anzahl der ‚a‘ Codes zählen mit:

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

aber ich kann nicht herausfinden, wie es Person zu vergleichen, um zu bekommen. data $ date mit jedem daily.data $ date. Ich könnte auf Excel zurückgreifen und eine COUNTIFS() Formel verwenden, aber ich möchte wirklich verstehen.

Jede Hilfe würde in großem Maße erhalten werden, danke im Voraus.

+0

'merge (daily.data, Tabelle (date = person.data $ date [person.data $ present_absent == 'a'])) ', vielleicht – alistaire

Antwort

0

A dplyr Lösung:

library(dplyr) 
inner_join(person.data, daily.data) %>% 
    group_by(date, week_code) %>% 
    summarize(absence_count = sum(present_absent == 'a')) 
+0

Vielen Dank! –

2

Sie können das Aggregat und% in% in Funktion R. verwenden

# 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] 
+0

Vielen Dank! –

Verwandte Themen