2016-08-04 5 views
1

Ich werde zählen, wenn ein Ereignis aufgetreten ist und wenn es aufgetreten ist, hatte es irgendeine Konsequenz oder nicht. Lassen Sie uns dies annehmen, sind meine Datenzählen Variablen mit einer bestimmten Bedingung

#mydata 

a b c d consequence 
0 0 1 1 0 
1 0 1 1 1 
1 1 1 0 0 
0 0 0 1 0 

Also, für jede Variable I berechnen, wie oft eine Variable aufgetreten ist und wie oft diese Variable verursachte eine Folge: ein Beispiel für „a“

numberofa=length (subset(mydata, mydata$a==1)) 
    numberofaeffective= Length (subset(mydata, mydata$a==1 $ mydata$consequence=1)) 

Wie kann ich ein Programm schreiben, um diese beiden Metriken für jede Variable zu berechnen?

#expected output 

variable count count-with-effect 
a  2   1 
b  1   0 
c  3   1 
d  3   1 
+0

Also, "Konsequenz" ist die erwartete Ausgabespalte? Basierend auf Ihrem Code werden die Zeilen substriert, wobei "a" 1 ist, und dann erneut basierend auf Spalte1. Ich bin nicht sicher, was die erwartete Ausgabe ist. – akrun

Antwort

1

Wir können dies tun, mit sum logischer Vektor

sum(dts$a==1) 
#[1] 2 

und

with(dts, sum(a==1 & consequence == 1)) 
#[1] 1 

Wenn wir es für jede der Variablen müssen (dh 'a' bis " d ')

colSums(dts[1:4] == 1) 
# a b c d 
# 2 1 3 3 

und für die zweite mit ‚Folge‘

colSums(dts[1:4] == 1 & (dts[5] == 1)[row(dts[1:4])]) 
#a b c d 
#1 0 1 1 

Wenn wir es in einem bestimmten Format benötigen wir den Datensatz in ‚long‘ Format gather können, tun Sie dann die Gruppe durch den Betrieb und summarise durch sum ming die Spalte 'Wert'

library(dplyr) 
library(tidyr) 
gather(dts, variable, value, -consequence) %>% 
      group_by(variable) %>% 
      summarise(count = sum(value), count_with_effect = sum(value & consequence)) 
# variable count count_with_effect 
#  <chr> <int>    <int> 
#1  a  2     1 
#2  b  1     0 
#3  c  3     1 
#4  d  3     1 
+0

@MehdiFarhangian Ich habe den Beitrag aktualisiert – akrun