所以我正在医院处理生物数据,(我不会在这里透露任何内容,但我不需要提出这个问题)。我们正在研究一段时间内抗体的浓度。由于某种原因,我们的数据集中缺少数据点。 我正在做的是尝试删除丢失的数据点及其相应的时间。现在基本目标只是让一些基本的图形和图表启动并运行但最终我们会想要创建一些我们将用另一种语言做的逻辑模型和非线性动力学模型。
1)首先,我将数据与相应的时间一起放入向量中:
data <- read.csv("blablabla.csv" header = T)
Biomarker <- data[,2]
time <- data[,1]
2)然后我对数据进行排序:
Biomarker <- Biomarker[order(time)]
time <- sort(time, decreasing = F)
3)然后我将NA值的索引放入向量
NA_Index <- which(is.na(Biomarker))
4)然后我尝试删除生物标记和时间向量
的索引处的数据点i <- 1
n <- length(NA_Index)
for(i:n){
Biomarker[[NA_Index[i]]] <- NULL
time[[NA_Index[i]]] <- NULL
}
此外,我尝试了一些与上面不同的东西:
1)
Biomarker <- Biomarker[-NA_Index[i]]
2)
Biomarker <- Biomarker[!= "NA"]
我的问题是:“如何从我的向量中删除NA值并删除具有相同索引的时间?”
所以显然我对R来说很新,可能会在完全错误的情况下解决这个问题。我只是要求您解释所有函数在发布一些代码时所做的所有事情。谢谢你的帮助。
答案 0 :(得分:1)
首先,我建议将数据存储在data.frame
而不是两个向量中,因为vecotors中的条目对应于这是更合适的数据结构的情况。
my_table <- data.frame(time=time, Biomarker=Biomarker)
然后你可以简单地对整个data.frame
进行子集化,第一个维度是行,第二个列像往常一样,保留第二个维度以保留所有列。
my_table <- my_table[!is.na(my_table$Biomarker), ]
答案 1 :(得分:0)
> BioMarker
[1] 1 2 NA 3 NA 5
> is.na(BioMarker)
[1] FALSE FALSE TRUE FALSE TRUE FALSE
> BioMarker[is.na(BioMarker)]
[1] NA NA
> BioMarker[! is.na(BioMarker)]
[1] 1 2 3 5
> BioMarker <- BioMarker[! is.na(BioMarker)]
> BioMarker
[1] 1 2 3 5