2017-10-23 6 views
0

問題:異なる列名を持つ数値列のデータフレームがあります。列は毎回同じ位置にあります。 df MatAは、データフレームYoungAiBAQ.YoungA.0130という名前の列を持つ場合、iBAQ.MatA.0130という列を持ちます。列11を列8で分割したい。それらは常に同じ位置にあるので、MatA[9]YoungA[9]に相当する。パイプとパイプを使用して2つの列を分割する方法。 (ドット)の参照

私はdplyrを使用しています。コマンドの束をパイプして、更新された変数名で多くの行を手動で編集する必要がなければ、うれしいでしょう。だから、元のデータフレームを参照するのに.を使用したいのです。 しかし、これは以下の最低限の例に示すように、同一列の多くが作成され、間違った出力になり:

> library(dplyr) 
> Data <- data.frame(
    X = sample(1:10), 
    Y = sample(1:10) 
) 


> Data2 <- Data %>% 
    mutate(ratio = X/Y) 

> Data3 <- Data %>% 
    mutate(ratio = Data$X/Data$Y) 

> Data2, Data3 
    X Y  ratio 
1 8 1 8.0000000 
2 1 6 0.1666667 
3 5 10 0.5000000 
4 3 8 0.3750000 
5 2 3 0.6666667 
6 10 4 2.5000000 
7 6 9 0.6666667 
8 7 5 1.4000000 
9 9 7 1.2857143 
10 4 2 2.0000000 

出力は、私が欲しいものです、しかし、このアプローチは、のために、各変数名を手動で適応を必要とそれぞれの新しいデータフレーム

IDを使用しないで、カラムを位置別に分割して参照する別の方法を試してみると、mutate機能で使用されていない場合にのみ機能します。これは最も簡単に同じレイアウトが異なる変数とデータフレームの名前を持つ複数の異なるデータフレームに適合しているとして

> Data[1]/Data[2] 

      X 
1 8.0000000 
2 0.1666667 
3 0.5000000 
4 0.3750000 
5 0.6666667 
6 2.5000000 
7 0.6666667 
8 1.4000000 
9 1.2857143 
10 2.0000000 

> Data4 <- Data %>% 
    mutate(ratio = Data[1]/Data[2]) 

> Data5 <- Data %>% 
    mutate(ratio = .[1]/. [2]) 

> Data4, Data5 
    X Y ratio. ratio. ratio. ratio. ratio. ratio. ratio. ratio. ratio. ratio. 
1 8 1 8.0000000 8.0000000 8.0000000 8.0000000 8.0000000 8.0000000 8.0000000 8.0000000 8.0000000 8.0000000 
2 1 6 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 
3 5 10 0.5000000 0.5000000 0.5000000 0.5000000 0.5000000 0.5000000 0.5000000 0.5000000 0.5000000 0.5000000 
4 3 8 0.3750000 0.3750000 0.3750000 0.3750000 0.3750000 0.3750000 0.3750000 0.3750000 0.3750000 0.3750000 
5 2 3 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 
6 10 4 2.5000000 2.5000000 2.5000000 2.5000000 2.5000000 2.5000000 2.5000000 2.5000000 2.5000000 2.5000000 
7 6 9 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 
8 7 5 1.4000000 1.4000000 1.4000000 1.4000000 1.4000000 1.4000000 1.4000000 1.4000000 1.4000000 1.4000000 
9 9 7 1.2857143 1.2857143 1.2857143 1.2857143 1.2857143 1.2857143 1.2857143 1.2857143 1.2857143 1.2857143 
10 4 2 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 

私の目標は、DATA5のためのような命名法で終わることです。私はまた、この単純な分割を違う方法で表現する方法については、何も考えていないので満足しています。

ありがとうございました!

答えて

0

私はこれが機能することを考え出し:

Data6 <- Data %>% 
    mutate(ratio = .[,1]/.[,2]) 

どうやらパイプで連結された引数は異なる内部よりも作品の外で列を参照します。

私は他の人の参考としてこれを削除しません。

+0

この章は[Rのサブセット化](http://adv-r.had.co.nz/Subsetting.html)で確認してください。単一のブラケットは1列のdata.frameを返します。したがって、パイプ使用時の評価エラーです。回避策で余分なカンマが気に入らない場合は、カラムにアクセスする代わりに二重括弧を使用することができます:%Data%>%mutate(Ratio =。[[1]] /。[[2]]) ' –

+0

あなた、それは非常に貴重な入力です。 – Joram

関連する問題