0

R のデータセット全体に関数を適用するための 2 つの部分からなる質問があります。

i)最初に、cbind関数のようなものが各データフレームの最初の列を並べて並べ、次に2番目の列を並べるように、2つのデータフレームを繰り返し組み合わせてペアにしたい. 以下の例では、列の順序が eg1、eg4、eg2、eg5、eg3、eg6 の df1 と df2 を組み合わせた出力が必要です。

eg1 <- as.data.frame(matrix(sample(0:1000, 36*10, replace=TRUE), ncol=1))
eg2 <- as.data.frame(matrix(sample(0:500, 36*10, replace=TRUE), ncol=1))
eg3 <- as.data.frame(matrix(sample(0:750, 36*10, replace=TRUE), ncol=1))
df1 <- cbind(eg1,eg2,eg3)
eg4 <- as.data.frame(matrix(sample(0:200, 36*10, replace=TRUE), ncol=1))
eg5 <- as.data.frame(matrix(sample(0:100, 36*10, replace=TRUE), ncol=1))
eg6 <- as.data.frame(matrix(sample(0:350, 36*10, replace=TRUE), ncol=1))
df2 <- cbind(eg4,eg5,eg6)

私はこれを手動で行う方法を知っていますが(以下)、これははるかに大きなデータセットを組み合わせる場合には理想的ではなく、これを達成するためのより効率的な方法があるかどうか疑問に思っていましたか?

df3 <- cbind(df1,df2)
df3 <- df3[,c(1,4,2,5,3,6)]

(ii)これに続いて、対応する偶数列の7つの最高値に基づいて、各奇数列に7つの値を出力したいと思います。例として、最初の 2 つの列については...

df4 <- df3[,1:2]
High_7 <- tail(df4[order(df4[,2]),],7)#Highest 7 values in even column
High_7 <- High_7[,1] #Select odd column values

しかし、データセット全体でこれを使用する例では、何らかの形の適用関数を使用する方がはるかに効果的です。

4

1 に答える 1

0

両方のデータフレームの列を繰り返し結合する最初の質問について (これは、両方のデータフレームの名前が一意であり、OP にない場合にのみ機能することに注意してください):

df3 <- Reduce(cbind,
       Map(function(x, y) cbind(df1[x], df2[y]), names(df1), names(df2))) 

2番目の部分では、これを使用します:

results <- sapply(seq(1,ncol(df3),2),
                        function(i) df3[order(df3[,i+1], decreasing = TRUE), ][1:7,i])

結果を data.frame にしたい場合は、次のようにします。

results <- data.frame(results)
于 2015-06-09T11:22:34.003 に答える