2016-08-18 3 views
0

私はここに使用する家族を適用する混乱しています。 私はそれぞれの値にカスタム関数を適用し、カスタム関数がmyfunc("A")戻りベクトルのようなものであるR適用関数 - どちらを使用するか?

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

以下のように新しい列に結果を取得したい

terms 
A 
B 
C 

として、私は、データフレーム mydfを持っていますlike (23, 45, Good)

何か助けていただければ幸いです。

+0

入力データセットに1つの列、つまり「terms」しかない場合に、どのようにして 'Value1'と 'Value2'が得られましたか? – akrun

+0

それは他のデータソースから引き出された多くの値を持つ複雑な関数です。私は文字Aを渡しています。単純な式で簡単な例を取ることができます – Tarak

+0

'lapply'でループすることができます。 'lapply(mydf $ terms、function(x)...)'情報がなければ、それは – akrun

答えて

4

列間でデータ型が異なるため、データフレームの出力が必要なように見えます。したがって、データフレームを返すにはmyfuncを定義する必要があります。

はこのおもちゃの例を考えてみましょう:

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

それとも、plyrパッケージからadplyを使用することができます:

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

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

は、基本的なRを使用して一つの可能​​性が特長です

(> _ <)データフレームにRベース以外のものを試してみるのは初めてです。わからないadplyここに不要な列名が返されます...

+0

のようなものかもしれません**モデレーターノート**:コメントは議論の対象外です。これをチャットしてください。 –

3

rbindlistlapplyを使用できます。より効率的です

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

必要に応じて、私はベンチマークを表示できます。しかし、すでに表示されていますhere

関連する問題