2

カテゴリと値を持つデータフレームがあります。カテゴリに基づいて、別のテーブルに格納されている値を減算します。

myframe <- data.frame(
         x = factor(c("A", "D", "A", "C")), 
         y = c(8, 3, 9, 9))

reference <- c('A'= 1, 'B'= 2, 'C'= 3, 'D'= 4)  

望ましい (y-ref) 結果は次のようになります。

result <- data.frame(
         x = factor(c("A", "D", "A", "C")), 
         y = c(8, 3, 9, 9),
         r = c(7, -1, 8, 6))

      x y  r
    1 A 8  7        
    2 D 3 -1
    3 A 9  8
    4 C 9  6

この場合、参照「テーブル」は名前付きのベクトルですが、より適切なデータ形式に変更できます。

これを達成する方法がわかりません...

4

2 に答える 2

2

matchこれは、および[...を使用したかなり単純な作業です。

myframe$r <- myframe$y - reference[ match( myframe$x , names( reference ) ) ]
#  x y  r
#1 A 8  7
#2 D 3 -1
#3 A 9  8
#4 C 9  6

これは(数回以上)重複していることを確認してください。そのため、適切なポインターを見つけて質問を閉じる必要があります(ただし、入力データと目的の結果を表示してくれたことに感謝します。多くの質問は、あまりうまくレイアウトされていないことがよくあります)。

編集

サイトには、非常に多くの match基本的な質問があります。正確な複製として指すものを 1 つ選ぶのは困難です。 match 」で検索して、これらのいくつかをブラウズすることをお勧めします (このように検索語を角括弧で囲むと、特定のタグで検索できます"[r]")。

于 2013-10-28T18:19:23.147 に答える
1

data.table方法:

library(data.table)

# convert to data.table and set key for the upcoming merge
dt = data.table(myframe, key = 'x')
ref = data.table(x = names(reference), val = reference)

# merge and add a new column
dt[ref, r := y - val]
dt
#   x y  r
#1: A 8  7
#2: A 9  8
#3: C 9  6
#4: D 3 -1
于 2013-10-28T18:22:14.330 に答える