gpt4 book ai didi

用 R 中的平均组替换缺失值 - 错误 : out of boundaries

转载 作者:行者123 更新时间:2023-12-01 12:35:47 26 4
gpt4 key购买 nike

我有一个看起来像这样的大文件:

 V1    SNP1 SNP2 SNP3 SNP4 SNP5 SNP6 SNP7 SNP8 SNP9
GROUP1 1 NA 2 1 1 NA 1 1 2
GROUP1 1 2 NA 0 0 2 1 1 NA
GROUP1 0 2 2 0 NA 1 1 1 2
GROUP2 1 2 1 1 1 NA 2 0 2
GROUP2 1 1 1 NA 0 1 0 1 NA
GROUP2 1 1 NA 1 0 1 NA 1 0

我需要做的是用组平均值替换缺失值。我已经在一个小例子中完成了这个并且它有效。但是,当我在大文件中执行此操作时,出现错误:“下标越界”。我正在做的是:创建一个包含我想保留以供进一步分析的组的列表:

group.list = unique(data_file$V1)

现在我需要根据组对每一列进行平均:

A<-colMeans(data_file[data_file$V1 == group.list[1],-1],na.rm=T)
for(i in 2:length(group.list)){
A <- rbind(A, colMeans(data_file[data_file$V1 %in% group.list[i],-1], na.rm=T))
}
rownames(A)<-group.list

缺少一些列平均值 (SNP)。所以我这样做了:

SNP.present <- which(A[1,]>=0)
for(i in 2:length(group.list)){
SNP.present <- intersect(SNP.present,which(A[i,]>=0))
}
A <- A[,SNP.present]

data_file1 = data_file[,c(1,SNP.present+1)]
for(i in 1:dim(data_file1)[1]){
a <- which(is.na(data_file1[i,]))
if(length(a)>0){
data_file1[i,a]<-A[data_file1$V1[i],a]
}
}

当我在一个小数据集中运行它时,它似乎有效。但是,当我运行完整数据集时,出现错误:

Error in A[data_file1$V1[i], a] : subscript out of bounds

谁知道哪里出了问题?

最佳答案

你可以试试

library(data.table)
setDT(df1)[, lapply(.SD, function(x)
replace(x, is.na(x), mean(x, na.rm=TRUE))) , V1]

或者使用dplyr

library(dplyr)
df1 %>%
group_by(V1) %>%
mutate_each(funs(replace(., which(is.na(.)),
mean(., na.rm=TRUE))))

关于用 R 中的平均组替换缺失值 - 错误 : out of boundaries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29982141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com