Wenn ich diese einfache data.table verwenden (eine Spalte)eine data.table über Spaltennummern zugreifen und grep
mydata <- data.table(A=c("ID123", "ID22", "AAA", NA))
ich die Position der Zeilen beginnend mit „ID“ finden
grep("^ID", mydata[,A])
Wie bekomme ich das gleiche Ergebnis mit Zahlen statt? (Ich sage die erste Spalte).
Ich habe
versuchtgrep("^ID", mydata[,1, with=F])
, aber es funktioniert nicht.
Und noch wichtiger, ich würde es in der data.table Weise tun, den Befehl innerhalb der Klammern einführend.
mydata[,grep("^ID",.SD), .SDcols=1]
Aber das funktioniert nicht.
Ich habe diese Art und Weise gefunden, aber es ist zu verworren
mydata[,lapply(.SD, grep,pattern="ID"), .SDcols=1]
Was ist der richtige Weg, es zu tun?
Ein bisschen komplexer:
Was, wenn ich gleichzeitig zählen möchte, wie viele Zeilen nicht NA sind und mit "ID" beginnen?
So etwas wie
any(!(grepl("^ID", mydata[,A]) | is.na(mydata[,A])))
aber kompakte und in den Klammern.
Ich mag nicht die Tatsache, dass Grep die NA als nicht übereinstimmend ansieht, anstatt auch eine NA auszugeben.
Ich habe diesen Weg gefunden, aber es ist zu verworren mydata [, lapply (.SD, grep, pattern = " ID "), .SDcols = 1] – skan
Die erste Antwort in den FAQ erklärt, warum es" in der Regel schlecht ist, auf Spalten nach Nummer und nicht nach Namen zu verweisen "https://rawgit.com/wiki/Rdatatable/data.table/ vignettes/datatable-faq.html # j-num Eine Möglichkeit, Zeilen zu zählen, ist 'mydata [A% like%"^ID "| is.na (A), .N] '-'% like% 'ist nur eine bequeme Abkürzung für' grepl'. Übrigens könnte Ihr Beispiel besser sein, wenn es eine NA enthält. – Frank
Ich habe den Titel der Frage so geändert, dass die Anfrage genauer zusammengefasst wird. –