1

2つのデータフレームのすべての行と列に関数を適用しようとしましたが、applyで解決する方法がわかりません。次のスクリプトは、私が何をしようとしているのか、そしてそれを解決しようとした方法を説明していると思います。アドバイスをいただければ幸いです。simplefunctionは、単純にするためのサンプル関数としてのみ意図されていることに注意してください。

# some data and a function
df1<-data.frame(name=c("aa","bb","cc","dd","ee"),a=sample(1:50,5),b=sample(1:50,5),c=sample(1:50,5))
df2<-data.frame(name=c("aa","bb","cc","dd","ee"),a=sample(1:50,5),b=sample(1:50,5),c=sample(1:50,5))

simplefunction<-function(a,b){a+b}

# apply on a single row
simplefunction(df1[1,2],df2[1,2])

# apply over all colums
apply(?)

## apply over all columns and rows
# create df to receive results
df3<-df2

# loop it
for (i in 2:5)df3[i]<-apply(?)
4

3 に答える 3

3

私の最初のmapply答え!あなたの簡単な例のためにあなたは持っています...

mapply( FUN = `+` , df1[,-1] , df2[,-1] )
#         a  b  c
#   [1,] 60 35 75
#   [2,] 57 39 92
#   [3,] 72 71 48
#   [4,] 31 19 85
#   [5,] 47 66 58

あなたはそれをそのように拡張することができます...

mapply( FUN = function(x,y,z,etc){ simplefunctioncodehere} , df1[,-1] , df2[,-1] , ... other dataframes here )

データフレームは関数に順番に渡されるため、この例では、df1はx、df2はy、zになり、etcはこの順序で指定する他のデータフレームになります。うまくいけば、それは理にかなっています。mapplyすべてのデータフレームの最初の行、最初の列の値を取得して関数を適用し、次にすべてのデータフレームの最初の行、2番目の列を取得して、関数を適用します。

于 2013-03-26T15:33:48.653 に答える
2

また、使用することができますReduce

set.seed(45) # for reproducibility
Reduce(function(x,y) { x + y}, list(df1[, -1], df2[,-1]))
#    a  b  c
# 1 53 22 23
# 2 64 28 91
# 3 19 56 51
# 4 38 41 53
# 5 28 42 30
于 2013-03-26T15:29:12.670 に答える
1

あなたはただすることができます:

df1[,-1] + df2[,-1]

これは:

   a  b  c
1 52 24 37
2 65 63 62
3 31 90 89
4 90 35 33
5 51 33 45
于 2013-03-26T15:29:54.227 に答える