1

それぞれ 250 万の obs を持つ 2 つの変数で構成される data.frame があります。

str(values)
data.frame':    2529905 obs. of  2 variables:
 $ Date : Factor w/ 498 levels "1977-11","1978-06",..: 108 60 12 108 58 108 132 188 51 60     ...
$ Value: num  223000 171528 110269 426000 172436 ...
> head(values)
 Date    Value
1 2003-01 223000.0
2 1999-01 171528.0
3 1992-01 110268.6
4 2003-01 426000.0
5 1998-11 172436.5
6 2003-01 334000.0

日付ごとの中央値で data.frame を作成したかった:

library(plyr)
medianperdate = ddply(values, .(Date), summarize, median_value = median(Value))

> str(medianperdate)
'data.frame':   498 obs. of  2 variables:
 $ Date        : Factor w/ 498 levels "1977-11","1978-06",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ median_value: num  106638 84948 85084 75725 88487 ...
> head(medianperdate)
     Date median_value
1 1977-11    106638.35
2 1978-06     84947.65
3 1985-07     85083.79
4 1986-05     75724.58
5 1986-11     88487.14
6 1986-12     98697.20

しかし、私が欲しいのは、月ごとの観測を数える追加の列です(たとえば、2003-01、使用されるデータはオブジェクトの「値」になります)

そして、それがどのクラスハウスであるかを定義する別の追加の列:

a : < 200 000 
b : < 300 000 & > 200 000
c : < 300 000 & > 2000000

私はこれを続けますが、すでに数時間立ち往生しているので、助けていただければ幸いです!!

明確でない場合、私が理解できること。次のテストデータフレームは、データフレームをどのように見せたいかを示しています

> testdf
Year MedianValue HouseClass #Observations
1 1999-1      200000          B           501
2 1999-2      150000          A           664
3 1999-3      250000          C           555
4

2 に答える 2

0

あなたの前の質問に対する私の答えのように 0

library(data.table)
dt <- data.table(df)


dt2 <- dt[,list(
   medianvalue = median(value),
   obs = .N
   ),
   by = "Date"
]

dt2[,HouseClass := "c"]
dt2[obs < 300000,HouseClass := "b"]
dt2[obs < 200000,HouseClass := "a"]
于 2013-11-06T16:41:24.237 に答える
0

apply および apply like 関数 (plyr 関数を含む) に関数を記述できます。次のようになります。

ddply(values, .(Date), .fun = function(x) {
  median <- median(x)
  value <- ifelse(median < 200000, 'A', ifelse(median < 300000, 'B', 'C'))
  n <- length(x)
  return(c(median, value, n))
})
于 2013-11-06T16:45:13.327 に答える