1

以下を使用して、RのSQLデータフレームからデータを取得します。

query <- "SELECT date, identifier, somevalue FROM mytable"
data <- sqlQuery(conn, query)

それは私に与えます:

> data
        date identifier somevalue
1 2011-01-01          1      0.50
2 2011-01-02          1      0.40
3 2011-01-01          2      0.70
4 2011-01-02          2      0.10
5 2011-01-03          2      0.25

data <- data.frame(date=c("2011-01-01","2011-01-02","2011-01-01","2011-01-02","2011-01-03"), identifier=c(1,1,2,2,2), somevalue=c(0.5,0.4,0.7,0.1,0.25))

行名として日付を使用し、列名として識別子を使用して、これを数値マトリックスに変換したいと思います。

> output
             1    2
2011-01-01 0.5 0.70
2011-01-02 0.4 0.10
2011-01-03  NA 0.25

output <- matrix(c(0.5,0.4,NA,0.7,0.1,0.25),3)
rownames(output) <- c("2011-01-01","2011-01-02","2011-01-03")
colnames(output) <- c(1,2)

これを行う方法がわかりません。私は調べましたがreshapematch行名または識別子が重複しているため、常に失敗します。

4

1 に答える 1

2

私は通常reshape2dcastから使用します(ただし、これを行うには多くの方法があります):

dcast(data,
      date~identifier,
      fun.aggregate = sum,
      value.var = "somevalue",
      fill = NA_real_)
        date   1    2
1 2011-01-01 0.5 0.70
2 2011-01-02 0.4 0.10
3 2011-01-03  NA 0.25

step1 <- dcast(data,
               date~identifier,
               fun.aggregate = sum,
               value.var = "somevalue",
               fill = NA_real_)
m <- as.matrix(step1[,-1])
rownames(m) <- step1$date
> m
             1    2
2011-01-01 0.5 0.70
2011-01-02 0.4 0.10
2011-01-03  NA 0.25

私が遭遇した1つの問題は、「正しい」NA値(この場合は)を使用することでしたNA_real_。どちらかdcastを試した場合、またはあまり意味がない場合はエラーをスローしていましたが、長い間考えていませんでした。NANA_integer_

編集OK、今私はそれを取得します。NAタイプは、明らかに残りのデータのタイプと一致する必要があります。適切なNAタイプに変換できると期待していdcastましたが、そうではないと思います。

于 2013-01-16T16:44:48.597 に答える