2016-08-18 3 views
0

Ich bin verwirrt, welche Familie zu verwenden, um hier zu verwenden. Ich habe einen Datenrahmen mydf alsR Anwendungsfunktion - welche verwenden?

terms 
A 
B 
C 

I benutzerdefinierte Funktion zu jedem der Werte anwenden möchten und die Ergebnisse in neue Spalten wie erhalten unter

terms Value1 Value2 ResultChar 
A  23  45  Good 
B  12  34  Average 
C  9  23  Poor 

benutzerdefinierte Funktion ist so etwas wie myfunc("A") einen Vektor zurückgibt wie (23, 45, Good)

Jede Hilfe wird geschätzt.

+0

Wie haben Sie 'Value1' und 'Value2' in der erwarteten erhalten, wenn Ihr Eingabe-Dataset nur eine einzige Spalte, d. – akrun

+0

Es ist eine komplexe Funktion mit vielen Werten aus anderen Datenquellen gezogen ... Alles, was ich passiere, ist das Zeichen A. Sie können ein einfacheres Beispiel mit einer einfachen Formel nehmen – Tarak

+0

Sie können mit 'lapply' ie Schleife. 'lapply (mydf $ terms, function (x) ...)' ohne weitere Informationen, ist es schwierig zu empfehlen – akrun

Antwort

4

Sieht aus, als ob Sie eine Datenrahmenausgabe möchten, da Sie über Spalten unterschiedlichen Datentyp haben. Sie müssen also myfunc definieren, um einen Datenrahmen zurückzugeben.

dieses Spielzeug Beispiel vor:

mydf <- data.frame(terms = letters[1:3], stringsAsFactors = FALSE) 
myfunc <- function (u) data.frame(terms = u, one = u, two = paste0(u,u)) 

Dies ist eine Möglichkeit, Grund R Funktionen mit:

do.call(rbind, lapply(mydf$terms, myfunc)) 
# terms one two 
#1  a a aa 
#2  b b bb 
#3  c c cc 

Oder können Sie adply aus plyr Paket verwenden:

library(plyr) 
adply(mydf, 1, myfunc) 
# terms terms.1 two 
#1  a  a aa 
#2  b  b bb 
#3  c  c cc 

(> _ <) ist es das erste Mal, dass ich etwas anderes als R base für einen Datenrahmen versuche; nicht sicher, warum adply hier unerwünschte Spaltennamen zurückgibt ...

+0

** Moderator Hinweis **: Kommentare sind nicht für längere Diskussion; Nimm das bitte um zu chatten. –

3

Wir können rbindlist mit lapply verwenden. Es wäre effizienter

library(data.table) 
rbindlist(lapply(mydf$terms, myfunc)) 

Bei Bedarf kann ich die Benchmarks zeigen. Aber, sie sind bereits gezeigt here

Verwandte Themen