2016-11-17 4 views
0

Как бороться с за-петель вычисления функции для каждой строки в кадре данных, как это:функции для каждой строки в одном столбце в кадре данных

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

Я попытался это

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

Я считаю, существует более эффективный способ (например, применить или smth). Пожалуйста, помогите мне.

UPD. Хорошо, я вижу, спасибо! Но у меня есть еще один пример:

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 
    } 
} 

, а затем

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

В этом случае

wd3$corr <- corr(wd3$word) 

не работает ...

+3

Петля не требуется: 'stemmed2 $ stem <- gsub ('in', 'in_', stemmed2 $ stem)'. – lmo

ответ

0

Я думаю, что это должен делать то, что вы хотите:

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)) 

Функция возвращает корректность корреляции, но проблема заключалась в том, что вы перебирали каждый элемент вашего словарного вектора. Вы можете заменить это функцией sapply, используя только уникальные элементы вашего словарного вектора. Вы также можете интегрировать корреляцию в кадре данных, повторяя корреляционные оценки столько раз, сколько слов.

Смежные вопросы