1

次の(簡単な)問題に取り組んでいますが、良い解決策が見つかりません。次のように df を考えます。

test<-c("A","B","C","D","E","F")
test2<-sample(1:6)
test3<-data.frame(test,test2)

2 行目には列 2 の行 1:2 の比率、4 行目には列 2 の比率 3:4、6 行目には列 2 の比率 5:6 を示す 3 番目の列が必要です。私のdfははるかに大きく、そうでなければ私は手作業で行っていたでしょう:)それを行う方法に関する提案はありますか? diffコマンドで差分を取得できることは知っていますが、比率は?また、行を一緒にバインドするにはどうすればよいですか? split() はそれをしていないようです。

4

3 に答える 3

1

これはかなり速いはずです:

test3$ratio <- NA
test3$ratio[c(FALSE, TRUE)] <- test3$test2[c(FALSE, TRUE)] /
                               test3$test2[c(TRUE, FALSE)]
于 2013-07-09T11:14:39.203 に答える
0

ループを使用します (以下の 6 の代わりに、大きなデータフレームの最後の行の数を入れることができます):

 for( i in seq(2,6,by=2)) {
test3$ratio[i] <- with(test3,test2[i-1]/test2[i])
}
> test3


   test test2     ratio
1    A     3        NA
2    B     5 0.6000000
3    C     4        NA
4    D     6 0.6666667
5    E     1        NA
6    F     2 0.5000000
于 2013-07-09T11:06:36.067 に答える