I have a list of dataframes, the first dataframe looks like this:
> head(allyears_dom_order[[1]],10)
SiteName survey1 survey2 survey3 survey4 survey5 survey6 survey7 survey8 survey9 survey10 survey11 survey12 survey13 survey14 survey15 survey16 survey17 survey18 survey19 survey20
1 1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2 2 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
3 3 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
4 4 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
5 5 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
6 6 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
7 7 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
8 8 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
9 9 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
10 10 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Each dataframe has the same number of rows but different number of columns (max is something in the 600s). I also have the following list which contains the number of non-NA elements for each row in each dataframe:
rowsums <- foreach(i=1:13) %do% {
allyears_dom_order[[i]] %>%
select(2:ncol(.)) %>%
is.na %>%
`!` %>%
rowSums
> rowsums[[1]]
[1] 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 16 3 5 0 3 0 0 0 0 0 0 0 3 0 1 0 0 0 2 1
[60] 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 3 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 3 12 1 0 0 0 0 5 48
I want to create a new list of dataframes, where the number of columns (surveys) is capped at 50. So if the rowsums is greater than 50, I want to randomly sample 50 of those non-NA elements in that row and put it in a new dataframe. Im thinking something like this:
for(i in 1:nrow(allyears_dom_order[[1]])){
for (t in 1:13){
if (rowsums[i,t] > 50){
all<-allyears_dom_order[[t]][i,]
all50<-sample(all,50,replace=FALSE)
}
}
}
But this wouldn't work, since the all would contain NAs and I don't want to randomly sample them, only those with non-NA.
Aucun commentaire:
Enregistrer un commentaire