Ich habe einen Datenrahmen mit Spaltennamen zu ignorieren, die wie folgt aussehen:Strings Suche nach mehreren Übereinstimmungen
d=c("Q.40a-some Text", "Q.40b-some Text", "Q.44a-some Text", "Q.44b-some Text" "Q.44c-some Text" "Q.44d-some Text" ,"Q.4a-some Text", "Q.4b-some Text")
Ich möchte die Spalten identifizieren, die mit Q.4 beginnen und die Q.40 zu ignorieren, Q. 44.
Zum Beispiel Q.44
oder Q.40
zu identifizieren, ist einfach. Was ich tue ist, diese "^Q.44"
oder "^ Q.40" als Eingabe für meine Funktion zu verwenden. Aber das funktioniert nicht, wenn ich dasselbe für die Identifizierung von Q.4 tue - einfach weil alle Namen mit Q.4 beginnen. Kann mir also jemand dabei helfen?
UPDATE
Das Ergebnis, das ich es übergeben wollen, um meine Funktion, die Eingänge wie folgt nimmt:
multichoice<-function(data, question.prefix){
index<-grep(question.prefix, names(data)) # identifies the index for the available options in Q.12
cases<-length(index) # The number of possible options/columns
# Identify the range of possible answers for each question
# Step 1. Search for the min in each col and across each col choose the min
# step 2. Search for the max in each col and across each col choose the max
mn<-min(data[,index[1:cases]], na.rm=T)
mx<-max(data[,index[1:cases]], na.rm=T)
d = colSums(data[, index] != 0, na.rm = TRUE) # The number of elements across column vector, that are different from zero.
vec<-matrix(,nrow=length(mn:mx),ncol=cases)
for(j in 1:cases){
for(i in mn:mx){
vec[i,j]=sum(data[, index[j]] == i, na.rm = TRUE)/d[j] # This stores the relative responses for option j for the answer that is i
}
}
vec1<-as.data.frame(vec)
names(vec1)<-names(data[index])
vec1<-t(vec1)
return(vec1)
}
Und die Art, wie ich meine funtion verwenden ist diese
q4 <-multichoice(df2,"^Q.4")
Mit "^ Q.4" beabsichtige ich die Spalten für Q.4
zu identifizieren, und df2
ist mein Datenframe.
Danke Imo, das ist cool. Ich habe ein bisschen Probleme mit regulären Ausdrücken und die Dokumentation ist wirklich schlecht für einen Anfänger wie mich. Kannst du mir bitte helfen, wie ich deine Methode nutze, um das Ergebnis an meine Funktion zu übergeben? Ich habe meine Frage entsprechend bearbeitet, um zu sehen, was meine Funktion als Eingabe benötigt. – msh855
Meine Lieblingsregex-Site ist [hier] (http://www.regular-expressions.info/). Sie haben viele tolle Infos. Was Sie jetzt fragen, sollte in einer neuen Frage gestellt werden, aber ich werde einen Blick darauf werfen. – lmo
Ich aktualisierte meine Antwort, um eine Methode zur Berechnung des Minimums zu geben. Wenn Sie mehr benötigen, sollten Sie eine neue Frage stellen, die auch einige Beispieldaten (mit "dput") enthält, mit denen Personen ihre Lösungen testen können. – lmo