我有一个数据集,其中包含主题id、段(1-42)的列,以及具有振幅(微伏,t变换)的两列。研究的目的是比较手动和自动评分的肌电数据的评分/量化方法。这就是为什么有两列振幅的原因。我现在的目标是在两列中的任何一列中排除NA比例为≥20%的参与者(列"vp")。或者,打印满足标准的受试者的主题id也是足够的。我有使用if-else函数的想法,但我不知道如何定义标准。
这是我的数据集的第一行;每个主题有42行。
structure(list(vp = c("AD_001_B_NPU", "AD_001_B_NPU", "AD_001_B_NPU", "AD_001_B_NPU", "AD_001_B_NPU", "AD_001_B_NPU", "AD_001_B_NPU", "AD_001_B_NPU", "AD_001_B_NPU"), seg = c(1, 2, 3, 4, 5, 6, 7, 8,9), t_amp_manual = c(70.6,81.4,58.1, 78.1, 59.2, 55.1, 55.1, 62.2,59.7), t_amp_automatic = c(73.7, NA, 59.8, 82.9, 62.7, NA, 53.6, 65.0, 63.3), (row.names = c("vp", "seg", "t_amp_manual","t_amp_automatic"), class = "data.frame")发布于 2020-12-11 22:22:13
未测试,因为我不能让您的数据工作,但这应该可以工作:
library(dplyr)
npu_Kopie %>%
## assuming `vp` is the "subject" column??
group_by(vp) %>%
filter(
mean(is.na(t_amp_manual)) < 0.2 & mean(is.na(t_amp_automatic)) < 0.2
)发布于 2020-12-11 22:30:18
这不是最干净的代码,但它可能会解决你的问题。
df <- data.frame(a = c(1,2,3,4,5,6), b = c(NA,2,3,NA,5,NA), c = c(1,2,3,4,5,6), d = c(1,NA,NA,NA,5,6), e = c(1,2,3,NA,NA,6), f = c(1,NA,NA,NA,5,6))
for(i in 1:length(df[1,])){
if(sum(is.na(df[,i]))/length(df[,i])<= 0.2){
} else {
df <- df[,-i]
}
}https://stackoverflow.com/questions/65252791
复制相似问题