R数据帧到具有3维的表

R数据帧到具有3维的表,r,R,这是发病率数据。死亡和风险时间按农场和年份进行分层 我正在尝试使用方法将数据转换为epi.2by2所需的格式= “队列时间”(epiR包) 示例数据: test <- rbind(c(12, 2,0), c(29,16,26), c(6941, 6083, 5051), c(4555, 5148, 3608)) colnames(test) <- c(3, 3.5, 4) rownames(test) <- c("deaths-unexposed", "deaths-expos

这是发病率数据。死亡和风险时间按农场和年份进行分层 我正在尝试使用方法将数据转换为epi.2by2所需的格式= “队列时间”(epiR包)

示例数据:

test <- rbind(c(12, 2,0), c(29,16,26), c(6941, 6083, 5051), c(4555, 5148, 3608))
colnames(test) <- c(3, 3.5, 4)
rownames(test) <- c("deaths-unexposed", "deaths-exposed", "timeatrisk-unexposed", "timeatrisk-exposed")

farm-year               3  3.5    4
deaths-unexposed       12    2    0
deaths-exposed         29   16   26
timeatrisk-unexposed 6941 6083 5051
timeatrisk-exposed   4555 5148 3608
等等

我试着用几种方法使用table(),但它为我提供了扩展表,每个农场年都有很多0。我相信这是一个简单的答案(重塑?xtabs?),我就是找不到

有点嚼东西:

库(tidyverse)
测试标签%
t()%>%#转置矩阵
as.data.frame()%>%
行名到列('farm\u year')%>%
聚集(var,val,-农场年)%>%#重塑为长形
独立(var,c('变量','暴露')%>%#独立变量
xtabs(val~暴露+变量+农场年)
测试标签
#>,农场年=3
#> 
#>变数
#>暴露死亡时间风险
#>暴露294555
#>未曝光126941
#> 
#>,农场年=3.5
#> 
#>变数
#>暴露死亡时间风险
#>暴露165148
#>未曝光26803
#> 
#>,农场年=4
#> 
#>变数
#>暴露死亡时间风险
#>暴露26 3608
#>未曝光5051

使用
数据表

test <- as.data.table(t(rbind(c(12, 2,0), c(29,16,26), c(6941, 6083, 5051), c(4555, 5148, 3608))))

colnames(test) <- c("deaths-unexposed", "deaths-exposed", "timeatrisk-unexposed", "timeatrisk-exposed")
test[, farm_year := c(3, 3.5, 4)]

result <- melt(test, measure = patterns("^deaths", "timeatrisk"), value.name = c("deaths", "timeatrisk"), variable.name = "Exposed", variable.factor=FALSE)
result[, Exposed := as.numeric(Exposed) - 1]

result[farm_year==3]
   farm_year Exposed deaths timeatrisk
1:         3       0     12       6941
2:         3       1     29       4555

result[farm_year==3.5]
   farm_year Exposed deaths timeatrisk
1:       3.5       0      2       6083
2:       3.5       1     16       5148

test这很好,但我需要它作为一个表,而不仅仅是一个子表来查看。这就做到了——我将把tidyverse添加到我的包列表中!
test <- as.data.table(t(rbind(c(12, 2,0), c(29,16,26), c(6941, 6083, 5051), c(4555, 5148, 3608))))

colnames(test) <- c("deaths-unexposed", "deaths-exposed", "timeatrisk-unexposed", "timeatrisk-exposed")
test[, farm_year := c(3, 3.5, 4)]

result <- melt(test, measure = patterns("^deaths", "timeatrisk"), value.name = c("deaths", "timeatrisk"), variable.name = "Exposed", variable.factor=FALSE)
result[, Exposed := as.numeric(Exposed) - 1]

result[farm_year==3]
   farm_year Exposed deaths timeatrisk
1:         3       0     12       6941
2:         3       1     29       4555

result[farm_year==3.5]
   farm_year Exposed deaths timeatrisk
1:       3.5       0      2       6083
2:       3.5       1     16       5148