R数据帧到具有3维的表
这是发病率数据。死亡和风险时间按农场和年份进行分层 我正在尝试使用方法将数据转换为epi.2by2所需的格式= “队列时间”(epiR包) 示例数据: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
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