我想在一组 20 种疾病(因子)中找到 3 种疾病的独特组合的总数,然后用平均值和 SD 绘制患病率,按年龄组交叉制表。我有一个来自 reprex 的代码,但是当应用于 csv 时(列以相同的顺序出现,但更多的可变疾病因此更宽 df)它会引发错误消息(如下)。csv和reprex有什么区别?(Reprex 就在底部)。
代码:
library(tidyverse)
library(utils)
dat <- read_csv("005_trimmed_spice.csv")
dat <- dat[,-c(3,20)]
dat$comorbid <- FALSE
comorbids <- dat[which(rowSums(dat[,7:20]) > 2),1]
dat[comorbids,"comorbid"] <- TRUE
cases <- combn(7:20,3)
dat[,cases[,1]]
make_comb <- function(x) dat[which(rowSums(dat[,cases[,x]]) > 2),1]
show_result <- function(x) dat[dat[make_comb(x)][which(rowSums(dat[,cases[,1]]) > 2),1],]
show_result(1)
show_result(2)
apply(cases, 2, show_result)
安慰:
dat <- read_csv("005_trimmed_spice.csv")
New names: 0s
`` -> ...47
`` -> ...48
`` -> ...49
`` -> ...50
`` -> ...51
...
Rows: 65534 Columns: 86
── Column specification ─────────────────────────────────────────────
Delimiter: ","
chr (1): age_group
dbl (45): UniquePatientID, Age, Sex, CarstairsQuintile, Carstairs...
lgl (40): ...47, ...48, ...49, ...50, ...51, ...52, ...53, ...54,...
:information_source: Use spec() to retrieve the full column specification for this data.
:information_source: Specify the column types or set show_col_types = FALSE to quiet this message.
dat <- dat[,-c(3,20)]
dat$comorbid <- FALSE
comorbids <- dat[which(rowSums(dat[,7:20]) > 2),1]
dat[comorbids,"comorbid"] <- TRUE
错误:必须分配给具有有效下标向量的行。x 下标合并症的类型错误 tbl_dfUniquePatientID:double。:information_source: 它必须是逻辑、数字或字符。运行 rlang::last_error() 以查看错误发生的位置。
cases <- combn(7:20,3)
dat[,cases[,1]]
A tibble: 65,534 x 3
Depression PainfulCondition ActiveAsthma
1 0 0 0
2 0 0 1
3 0 0 0
4 0 0 0
5 0 0 0
6 0 0 0
7 0 0 0
8 0 0 0
9 0 1 0
10 0 0 0
… with 65,524 more rows
make_comb <- function(x) dat[which(rowSums(dat[,cases[,x]]) > 2),1]
show_result <- function(x) dat[dat[make_comb(x)][which(rowSums(dat[,cases[,1]]) > 2),1],]
show_result(1)
错误:必须使用有效的下标向量对列进行子集化。x 下标 make_comb(x) 的类型错误 tbl_dfUniquePatientID:double。:information_source: 它必须是逻辑、数字或字符。运行 rlang::last_error() 以查看错误发生的位置。> show_result(2) 错误:必须使用有效的下标向量对列进行子集化。x 下标 make_comb(x) 的类型错误 tbl_dfUniquePatientID:double。:information_source: 它必须是逻辑、数字或字符。运行 rlang::last_error() 以查看错误发生的位置。> apply(cases, 2, show_result) 错误:必须使用有效的下标向量子集列。x 下标 case[, x] 必须是简单向量,而不是矩阵。运行 rlang::last_error() 以查看错误发生的位置。
上面的代码工作的代表:
ID =
c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
Age =
c(18, 77, 25, 30, 54, 78, 69, 62, 68, 63),
Sex =
c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
CarsQuintie =
c(2, 1, 3, 1, 1, 5, 1, 1, 5, 1),
age_group =
c("18 - 24", "65 - 74", "25 - 34", "25 - 34", "55 - 64", "75 - 84", "65 - 74", "55 - 64", "55 - 64", "55 - 64"),
CarsQuintie_group =
c(3, 1, 4, 3, 1, 5, 1, 2, 1, 3),
Diabetes =
c(1, 0, 0, 0, 0, 1, 1, 0, 1, 1),
Asthma =
c(1, 1, 0, 0, 0, 1, 1, 0, 1, 0),
Stroke =
c(0, 1, 0, 0, 0, 0, 0, 0, 0, 0),
Heart.attack =
c(1, 1, 0, 0, 0, 1, 1, 0, 1, 1),
COPD =
c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
Hypertension =
c(0, 0, 1, 0, 1, 0, 1, 0, 0, 0),
Eczema =
c(0, 1, 0, 0, 1, 0, 0, 0, 1, 0),
Depression =
c(0, 0, 0, 1, 0, 0, 0, 1, 0, 0))