У меня большой набор данных с 270 столбцами и 17392 строками. Из этих 270 мне нужно выбрать 235. Строки можно сгруппировать по «сайту», который представляет собой уникальное числовое значение c (например, 1, 2 и c - всего 111 различных сайтов). Каждый столбец представляет собой «регион». Вот небольшой пример (обратите внимание, что столбцов и тем намного больше):
SubjID LLatVent RLatVent FullSurfArea Site
Subj1 1580.6 2345 180980 1
Subj2 4803.8 2232 210003 1
Subj3 14936 1456 198045 2
Subj4 14556 1200 176079 2
Моя цель - вычислить количество выбросов для каждого региона, сгруппированных по сайтам, и распечатать CSV-файл с результат. Мой код работает, если я использую 1,5 * IQR, но я получаю сообщение об ошибке, если использую 2,5 * IQR, и я не понимаю, почему. Ошибка:
Error in names(x) <- value :
'names' attribute [235] must be the same length as the vector [1]
Моя попытка кода (неудачная):
#start
ALL <- read.csv("ALL.csv")
#get rows of interest (235)
start <- which(colnames(ALL)=="LLatVent")
end <- which(colnames(ALL)=="FullSurfArea")
#create vector with these row numbers
regions <- start:end
#divide by site (111 sites in total)
df_list <- split(ALL, as.factor(ALL$Site))
#loop through regions and save subjID in ALL frame outliers_subjID
for (j in df_list){
outliers_subjID_list <- list()
count <- 0
for (i in regions){
count <- count + 1
OutVals <- boxplot(j[,i], plot=FALSE, range=2.5)$out
outliers_subjID_list[[count]] <- j$SubjID[which(j[,i] %in% OutVals)]
}
n.obs <- sapply(outliers_subjID_list, length)
seq.max <- seq_len(max(n.obs))
outliers_subjID <- as.data.frame(sapply(outliers_subjID_list, "[", i = seq.max))
colnames(outliers_subjID) <- colnames(j)[regions]
#write csv files
write.csv(outliers_subjID, paste0(unique(j$Site), ".csv"))
}
Почему я получаю сообщение об ошибке при использовании range = 2,5? То же самое происходит, если я использую boxplot.stats (as.matrix (j [, i]), coef = 2.5) $ out.
Кроме того, я хочу рассчитать общее количество выбросов для каждого региона после того, как они были рассчитаны сайтом. На данный момент я привязываю все файлы csv, а затем использую summarise_all для расчета количества наблюдений для каждого региона, но я чувствую, что есть более умный способ.
Заранее большое спасибо, пожалуйста, дайте мне знать, если я может предоставить дополнительную информацию.