r - 如何解决 R 中的“.subset2(x, i, exact = exact) 中的错误”问题?
问题描述
我在 R 中使用以下数据框:
ID <- c(LETTERS[1:10])
GLUC <- c(88,NA,110,NA,90,88,120,110,NA,90)
TGL <- c(NA,150,NA,200,210,NA,164,170,190,NA)
HDL <- c(32,60,NA,65,NA,32,NA,70,NA,75)
LDL <- c(99,NA,120,165,150,210,NA,188,190,NA)
patient_num <- data.frame(ID,GLUC,TGL,HDL,LDL)
我想创建一个矩阵,其中 GLUC、TGL、HDL 和 LDL 作为行名,mean、median、sd、n 和 n_miss 作为列名。当我输入以下代码时:
r <- c(mean(patient_num[[varname]],na.rm=TRUE),
median(patient_num[[varname]],na.rm=TRUE),
sd(patient_num[[varname]],na.rm=TRUE),
sum(!is.na(patient_num[[varname]])),
sum(is.na(patient_num[[varname]]))
)
if (length(varname) == 1){
r <- matrix(r,nrow=T)
} else{
for (index in 2:length(varname)){
oneRow = table1(patient_num,varname[[index]])
r <- rbind(r,oneRow)
}
}
rownames(r) <- varname
colnames(r) <- c("mean","median","sd","n","n_miss")
return(r)
}
table1(patient_num,c("GLUC","TGL","HDL","LDL"))
我收到一条错误消息:
.subset2(x, i, exact = exact) 中的错误:递归索引在第 2 级失败
似乎无法弄清楚出了什么问题
解决方案
使用sapply()
from有一个更简单的解决方案base R
:
new_df <- sapply(patient_num, function(x) list(
mean = mean(x, na.rm = T),
sd = sd(x, na.rm = T),
n = sum(!is.na(x)),
is_na = sum(is.na(x))))
t(new_df)
#> mean sd n is_na
#>ID NA NA 10 0
#>GLUC 99.42857 13.45185 7 3
#>TGL 180.6667 23.0362 6 4
#>HDL 55.66667 19.00175 6 4
#>LDL 160.2857 40.06126 7 3
如果您只想要每行中非 NA 条目的计数,则可以从中删除ID
并patient_num
运行相同的代码。
请注意,您可能希望转换new_df
回data.frame
.
推荐阅读
- azure - Azure 数据工厂从 foreach 值中获取数据
- kubernetes - 自动将 imagePullSecrets 添加到 ServiceAccount
- csv - 来自 Google Cloud Storage 的 BigQuery 表
- optimization - OPL CPLEX,向我的优化问题添加相似性约束的问题
- swift - 在核心数据中存储测量值
- ruby-on-rails - 部署到 heroku 失败,因为 sqlite3 在 gems 中,即使它不是
- javascript - 使用图表js打印图表
- css - 在悬停时显示另一个元素 - css
- maven - Maven / Nexus:在构建目录中下载工件元数据
- airflow - 具有夏令时的气流调度