2016-11-17 2 views
0

Wie mit for-Schleifen behandeln Funktion für jede Zeile in Datenrahmen wie diese Berechnung:Funktion für jede Zeile in einer Spalte in Datenrahmen

for (i in 1:nrow(stemmed2)){ 
    stemmed2$stem[i] <- gsub('in ', 'in_', stemmed2$stem[i]) 
} 

Ich habe versucht, diese

apply(stemmed2[1], 2, function(x) gsub('in ', 'in_', x)) 

Ich glaube, Es gibt einen effizienteren Weg (wie apply oder smth). Bitte hilf mir.

UPD. OK, ich sehe, danke! Aber ich habe ein anderes Beispiel:

corr <- function(x){ 
    df <- wd3[wd3$word==as.character(x),] 
    if (nrow(df) < 3) {return('0')} 
    else { 
    cor <- cor.test(df$star, df$count) 
    cor$estimate 
    } 
} 

und dann

for (i in 1:nrow(wd3)) { 
    wd3$corr[i] <- corr(wd3$word[i]) 
} 

In diesem Fall

wd3$corr <- corr(wd3$word) 

nicht funktioniert ...

+3

Eine Schleife ist nicht notwendig: 'stemmed2 $ stem <- gsub ('in', 'in_', stemmed2 $ stem)'. – lmo

Antwort

0

Ich denke, sollte dies tun, was Sie wollen:

corr <- function(x){ 
    df <- iris[iris$Species == as.character(x), ] 
    if (nrow(df) < 3) { 
    return('0') 
    } else { 
    cor <- cor.test(df$Sepal.Length, df$Sepal.Width) 
    cor$estimate 
    } 
} 

corr("virginica") 
corr("setosa") 

correlation <- sapply(unique(iris$Species), corr) 

# And if you want to integrate that to your data frame then this should do it: 
iris$corr <- rep(correlation, each = table(iris$Species)) 

Die Funktion gibt die Korrelationsschätzung korrekt zurück, aber das Problem bestand darin, dass Sie jedes Element Ihres Wortvektors durchlaufen haben. Sie können das durch die Sapply-Funktion ersetzen, indem Sie nur die eindeutigen Elemente Ihres Wortvektors verwenden. Sie können die Korrelation auch in den Datenrahmen integrieren, indem Sie die Korrelationsschätzungen so oft wiederholen, wie Wörter vorhanden sind.

Verwandte Themen