2015-06-08 2 views
0

Извините, это, вероятно, дубликат, но у меня плохое время с функцией apply. Я хотел бы применить функцию к каждой строке набора данных, где функция будет выполнять операцию между двумя строками. Пример:R: Применить функцию к каждой строке данных, содержащей строки

(представьте себе dataframe с двумя colums: t1 & t2) «это», «это тест» «моя голова взорвется», «я люблю свою голову»

У меня есть функция, которая принимает две строки и возвращает количество слов в общем что-то вроде: (! Обратите внимание, я не вставил функцию я просто быстро напечатал это, чтобы дать вам indea так синтаксис может быть неправильным)

commonwords <- function(s1,s2) { 
    return (length(intersect(strsplit(s1,split=" ")[[1]],strsplit(s2,split=" ")[[1]]))) 
} 

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

Большое спасибо за помощь, я думаю, что это будет быстро :)

Луис.

+3

Вы можете проверить 'apply' Для цикла по строкам, MARGIN = 1 используется. т. е. используя вашу функцию 'apply (df1, 1, function (x) commonwords (x [1], x [2]))' – akrun

+0

Спасибо, мне не хватало синтаксиса о том, как передать параметры пользовательской функции. – user3635284

ответ

2

Прежде всего, примите время, чтобы создать воспроизводимый пример и чистый код.

Поскольку вы хотите применить операцию между двумя переменными, вы должны использовать здесь mapply.

xx <- 
data.frame(S1=c("this is","my head will explode"), 
      S2=c("this is a test", "i like my head")) 

mapply(commonwords,xx[,'S1'],xx[,'S2']) 
     this is my head will explode 
       2     2 

Где commonwords находится:

commonwords <- function(s1,s2) { 
    length(intersect(strsplit(s1,split=" ")[[1]], 
        strsplit(s2,split=" ")[[1]])) 
} 
Смежные вопросы