0

病院別および郡別の手続き価格を示す病院のメディケア データを操作したいとします。私のデータ フレームは、列 price、procedure、county を持つ df と呼ばれていました。郡ごとの各手続きの最低価格と最高価格を見つけたい場合は、次のようにします。

library(plyr)
mostexpensive <- ddply(df,c('county','procedure'),function(x)x[which(x$price==max(x$price)),])

各郡で最も高額な手術を行う病院を示す表を取得します。次に、各病院がリストされている回数を確認できます

summary(mostexpensive$hospital)

最後のステップでは、元の df データフレームに、行が最も高価な場合は TRUE 、それ以外の場合は FALSE という列を追加したいのですが、plyr 関数から論理ベクトルを取得する方法がわかりません。ありがとう。

4

2 に答える 2

3

再現可能なコードを投稿すると便利です。とにかくやってみて、

概要について

pricey <- ddply(df, c('county','procedure'), summarise, most = max(price), less=min(price))

および論理インデックスの場合

testing <- ddply(df, c('county','procedure'), mutate, expensive = price == max(price))
于 2013-05-21T00:18:38.670 に答える
1

再現可能な例を使用すると、回答が得やすくなります。次回はSOのヘルプについて考えてみてください。

そうは言っても、transform関数を使用して、既存のデータに新しい列を追加できます。

最初のステップは、おもちゃのデータ セットを作成することです。

set.seed(123)
df <- data.frame(
    county = sample(LETTERS[1:3], size = 20, replace = TRUE),
    procedure = sample(c(1, 2), size = 20, replace = TRUE),
    price = rpois(20, 10)
)

str(df)
## 'data.frame':    20 obs. of  3 variables:
##  $ county   : Factor w/ 3 levels "A","B","C": 1 3 2 3 3 1 2 3 2 2 ...
##  $ procedure: num  2 2 2 2 2 2 2 2 1 1 ...
##  $ price    : int  6 8 6 8 4 6 6 8 5 12 ...

plyrこれで、transform関数を使用できます

require(plyr)
expensive <- ddply(df, .(county, procedure),
                   transform, ismax = price == max(price))


expensive
##    county procedure price ismax
## 1       A         1     9 FALSE
## 2       A         1     7 FALSE
## 3       A         1    12  TRUE
## 4       A         2     6 FALSE
## 5       A         2     6 FALSE
## 6       A         2     8  TRUE
## 7       B         1     5 FALSE
## 8       B         1    12  TRUE
## 9       B         2     6 FALSE
## 10      B         2     6 FALSE
## 11      B         2    12  TRUE
## 12      B         2    11 FALSE
## 13      C         1     9  TRUE
## 14      C         1     9  TRUE
## 15      C         2     8 FALSE
## 16      C         2     8 FALSE
## 17      C         2     4 FALSE
## 18      C         2     8 FALSE
## 19      C         2    12  TRUE
## 20      C         2    12  TRUE
于 2013-05-21T00:19:08.177 に答える