2016-05-17 6 views
0

ich die Anzahl dieser folgenden Zeichen auf Computer möchten:Berechnen Sie die Anzahl des Auftretens eines gegebenen Zeichens in jeder Reihe eines Datenrahmens?

"AAA", "BBB", "CCC","DDD","EEE","FFF" 

In einem Datenrahmen wie diese

Id Var1 Var2 Var3 Var4 
    1 xtAAA bBBB fCCC ::hFF 
    2 xtAAA   ZEEE ::FFF 
    3 ooCCC bBBB CkCC 
    4   BBBh fCCC :-LLL 
    5 xtAAA lBBB eCCC ::FFF 
    6     BBBC 
    7 xtAAA CvCC fCCC BBBlF 

erhalten dann einen neuen Datenrahmen mit:

Id Var1 Var2 Var3 Var4 number.of.AAA number.of.BBB number.of.CCC 
    1 xtAAA bBBB fCCC ::hFF 
    2 xtAAA   ZEEE ::FFF 
    3 ooCCC bBBB CkCC 
    4   BBBh fCCC :-LLL 
    5 xtAAA lBBB eCCC ::FFF 
    6     BBBC 
    7 xtAAA CvCC fCCC BBBlF 

I habe viele Skripte gesehen, aber keiner von ihnen tut das, was ich erreichen möchte.

+2

Bitte fügen Sie den Code für uns die Daten neu erstellen frame.Also addieren Sie, was die erwartete Ausgabe ist – sachinv

+0

http://stackoverflow.com/a/19667053/244811 – sweaver2112

+1

Versuchen Sie 'cbind (df1, t (wenden Sie an (df1 [-1], 1, Funktion (x) sapply (v1, Funktion (y) Länge (grep (y, x))))) 'wo' v1 'ist der Vektor von Werten – akrun

Antwort

1

Folgendes sollte das tun, was Sie wollen:

# smaller subset of the data 
temp <- data.frame(matrix(c("xtAAA", "bBBB", "fCCC", "::hFF", "xtAAA","ZEEE", "::FFF"), byrow = T), stringsAsFactors=F) 

# build a little counter function 
counter <- function(strings, input) { 
    return(sapply(strings, function(i) sum(grepl(i, input)))) 
} 

# get the counts 
myCounts <- t(sapply(1:nrow(temp), function(i) counter(strings=c("AAA", "BBB", "CCC"), temp[i,]))) 

Sie diese zu Ihrem data.frame cbind mit hinzufügen:

allDone <- cbind(temp, myCounts) 
Verwandte Themen