Ich habe einen Zeichenvektor in meinem Datenrahmen in R. Ich möchte Schlüsselwörter in jedem Element nachschlagen, das Schlüsselwort referenzieren und zu einem neuen Vektor aufrufen, der je Das Wort ist eine x-Zahl von Wörtern entfernt von dem Schlüsselwort, das ich gerade gesucht habe.Wie nachschlagen und Referenz Schlüsselwörter beim Analysieren in R
Zum Beispiel sagen, dass ich die folgende Datenrahmen haben:
> v1 <- c(1:5)
> v2 <- c("abc def ghi", "jkl mno def", "pqr stu vwx", "abc def yz", "ghi jkl mno def")
> sample <- as.data.frame(cbind(v1, v2))
> sample$v1 <- as.numeric(sample$v1)
> sample$v2 <- as.character(sample$v2)
> sample
v1 v2
1 1 abc def ghi
2 2 jkl mno def
3 3 pqr stu vwx
4 4 abc def yz
5 5 ghi jkl mno def
> str(sample)
'data.frame': 5 obs. of 2 variables:
$ v1: num 1 2 3 4 5
$ v2: chr "abc def ghi" "jkl mno def" "pqr stu vwx" "abc def yz" ...
Und, würde Ich mag Vektor v3
erstellen, die das Wort „def“ in jedem Element nachschlägt und gibt das Wort unmittelbar vor. So zum Beispiel sollte v3
wie folgt aussehen:
> v3
[1] "abc" "mno" NA "abc" "mno"
Wie schreibe ich eine Funktion dies automatisch zu tun?
Ich habe eine Funktion, die ich verwendet habe, um Schlüsselwörter zu suchen und sie durch die gleiche Sache jedes Mal zu ersetzen. Veränderte für dieses Beispiel sieht es so etwas wie dieses:
> f1 <- function(df, cols, match_with, to_x = 'def'){
+ df[cols] <- lapply(df[cols], function(i)
+ ifelse(grepl(to_x, match_with, fixed = TRUE), TRUE,
+ i))
+ return(df)
+ }
> sample$v3 = NA
> sample = f1(sample, cols = c('v3'), match_with = sample$v2)
> sample
v1 v2 v3
1 1 abc def ghi TRUE
2 2 jkl mno def TRUE
3 3 pqr stu vwx NA
4 4 abc def yz TRUE
5 5 ghi jkl mno def TRUE
> str(sample)
'data.frame': 5 obs. of 3 variables:
$ v1: num 1 2 3 4 5
$ v2: chr "abc def ghi" "jkl mno def" "pqr stu vwx" "abc def yz" ...
$ v3: logi TRUE TRUE NA TRUE TRUE
ich auf dieser Seite einige der Forschung getan haben und andere ein, was „TRUE“ mit, in f1
zu ersetzen, so dass anstelle der Rücksendung „TRUE, "Es gibt das Wort unmittelbar vor dem Schlüsselwort zurück, das ich als Referenz suchen möchte. Ich denke ich bin nah dran. Hier ist, was ich bis jetzt habe:
> ptn <- "(.*?)"
> f2 <- function(df, cols, match_with, to_x = 'def'){
+ df[cols] <- lapply(df[cols], function(i)
+ ifelse(grepl(to_x, match_with, fixed = TRUE), gsub(ptn, " ", sample$v2),
+ i))
+ return(df)
+ }
> sample$v3 = NA
> sample = f2(sample, cols = c('v3'), match_with = sample$v2)
> sample
v1 v2 v3
1 1 abc def ghi ghi
2 2 jkl mno def def
3 3 pqr stu vwx <NA>
4 4 abc def yz yz
5 5 ghi jkl mno def def
> str(sample)
'data.frame': 5 obs. of 3 variables:
$ v1: num 1 2 3 4 5
$ v2: chr "abc def ghi" "jkl mno def" "pqr stu vwx" "abc def yz" ...
$ v3: chr " ghi" " def" NA " yz" ...
Dies sucht mein Schlüsselwort und gibt das letzte Wort des Elements zurück. Aber die Frage bleibt bestehen, wie referenziere ich das Keyword, das ich suche, und gebe ein Wort eine relative Entfernung davon zurück? Genauer gesagt, welches Muster muss ich ersetzen "(.*?)"
mit, um das Wort unmittelbar vor "def" zurückzugeben?
Danke für die Hilfe!
perfekt! Danke – DataProphets