我使用以下方法从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))
我想将此转换为数字矩阵,使用日期作为rownames和标识符作为colnames:
> 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)
我无法弄清楚如何做到这一点。我查看了reshape
以及match
但我总是因为有重复的rownames或标识符而失败。
答案 0 :(得分:2)
我通常使用 reshape2 中的dcast
(但有很多方法可以做到这一点):
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
我遇到的一次打嗝是使用“正确的”NA值,在这种情况下是NA_real_
。 dcast
如果我尝试NA
或NA_integer_
这对我来说没有多大意义,那么就会抛出错误,但我已经很久没有考虑过了。
编辑好的,现在我明白了。 NA类型显然需要匹配其余数据的类型。我希望dcast
能够转换为适当的NA类型,但我猜不是。