2

5 つの変数 ( ) を持つ巨大な data.frame がありますv1, v2, v3, v4, v5。1 つの変数に基づいていくつかのサブセットを作成する必要があります。例えば:

DATA
v1   v2    v3 ... 
1    1231  0.1
1    2653  0.3
1    4545  0.4
2    4545  0.6
2    3345  0.1
2    5675  0.7
3    6754  0.2
3    9989  0.85
3    3456  0.4
.
.
.
70000
70000
70000

この変数には70000を超える測定値があるため、自動化された方法で各データセットを簡単に生成する関数を使用して、v1 の各値のサブセットを作成したいと思います。次に、データセットを取得したら、v2 と v3 の相関を実行し、p 値と rho を別々の列に出力します。申し訳ありませんが、まだコマンドを試していませんが、関数の生成方法がわかりません。

4

2 に答える 2

2

パッケージには、この種の分析を実行するためのplyrいくつかの優れた機能があります。最も重要なのは、現時点でddplyです。

res = ddply(DF, .(v1), function(sub_data) {
   cor_result = cor.test(sub_data$v2, sub_data$v3)
   return(data.frame(p.value = cor_result$p.value, rho = cor_result$estimate))
})

> res
  v1   p.value       rho
1  1 0.1730489 0.9632826
2  2 0.2228668 0.9393458
3  3 0.5311018 0.6717314

cor.testp値も取得するためにを使用する必要があることに注意してください。

于 2012-11-12T10:33:45.953 に答える
2

これがR Baseソリューションです

DF <- read.table(text="v1   v2    v3 
1    1231  0.1
1    2653  0.3
1    4545  0.4
2    4545  0.6
2    3345  0.1
2    5675  0.7
3    6754  0.2
3    9989  0.85
3    3456  0.4", header=TRUE)

# Correlations and P-values
Result <- sapply(split(DF[,-1], DF$v1), function(x)
        c(cor.test(x$v2, x$v3)$estimate, P.val=cor.test(x$v2, x$v3)$p.value))

Result
              1         2         3
cor   0.9632826 0.9393458 0.6717314
P.val 0.1730489 0.2228668 0.5311018

Resultこれらを元の data.frame に追加する場合は、次を使用しますtransform()

transform(DF, 
          correlation=rep(Result[1,], table(DF[,1])),
          Pval=rep(Result[2,], table(DF[,1])))
  v1   v2   v3 correlation      Pval
1  1 1231 0.10   0.9632826 0.1730489
2  1 2653 0.30   0.9632826 0.1730489
3  1 4545 0.40   0.9632826 0.1730489
4  2 4545 0.60   0.9393458 0.2228668
5  2 3345 0.10   0.9393458 0.2228668
6  2 5675 0.70   0.9393458 0.2228668
7  3 6754 0.20   0.6717314 0.5311018
8  3 9989 0.85   0.6717314 0.5311018
9  3 3456 0.40   0.6717314 0.5311018
于 2012-11-12T10:22:40.310 に答える