Как «перезаписать» много столбцов на основе имени столбца без создания новых столбцов? - PullRequest
0 голосов
/ 18 мая 2019

Я рассчитываю еженедельные половые отношения выявления по годам для исследуемых видов в разных местах.Цель состоит в том, чтобы создать набор таблиц (разные таблицы для каждого сайта) с именами строк в качестве года и именами столбцов в качестве номера недели.

В нынешнем виде при использовании цикла для создания таблиц захвата по полу не все полы обнаруживались на каждом сайте каждую неделю, поэтому вместо создания столбца с сетевыми элементами он просто не создает столбец дляна той неделе, поэтому, когда я пытаюсь создать новую таблицу по разделению, она не работает из-за неравных размеров мужской и женской таблиц.

Я сгенерировал «фиктивную таблицу», которая является правильными размерамис правильными метками на недели и годы, заполненными NA, но я не знаю, как взять другую таблицу и перезаписать только те столбцы, которые имеют одинаковое имя, чтобы столбцы NA сохранялись в качестве заполнителей.Каждое объединение, объединение, список привязок или слияние, которые я пробовал, возвращает две таблицы, объединенные с новыми именами столбцов и всеми присутствующими значениями.

Я пробовал сначала подгруппировать данные по полу, а затем по сайту, какПлан для каждого сайта, чтобы получить свою таблицу.Затем агрегируйте данные таким образом, чтобы в столбцах были указана неделя, год и количество (количество обнаруженных для этого пола на этом сайте, на той неделе этого года).После этого он получает cast / dcast для отображения лет в виде строк и недель в виде столбцов.

Я не уверен, как сохранить одинаковые измерения и имена столбцов для всех фреймов данных, что я считаю необходимым для созданиятаблица соотношения мужчин и женщин.

dat_male <- subset(dat, dat$Sex == "1")
dat_fem <- subset(dat, dat$Sex == "2") 

Основная таблица данных имеет отдельную строку при каждом обнаружении образца, поэтому я выделил полы

df1<-as.data.frame(lapply(dat_week_total_table, function(x) rep.int(NA, length(x)))) #data frame with NAs of correct dimensions and col names.

for( k in 1:site_number){ 

  fem1<-subset(dat_fem, dat_fem$site == unique(dat_fem$site)[k])
  fem2<-aggregate(fem1$Count, by = list(fem1$jweek, fem1$YEAR), FUN = sum)
  colnames(fem2) = c("week", "YEAR", "Count")

  fem3<-dcast(fem2, YEAR~week, value.var = 'Count')
  fem3[is.na(fem3)] <- 0

fem_df<-df1 #here I've tried many functions but nothing has worked
# to overwrite only columns of the same name in fem_df with columns from fem3
#the same issue is occurs with the males

  assign(paste("fem_week_", unique(dat_fem$site)[k],"_table", sep = ""), fem3) #then the same process for the males  (same as female code but with male subset) 

  temp <- male_df/fem_df #this is to create the ratios, but assumes equal dimensions

  assign(paste("dat_m:f_weekly_", unique(dat_male$site)[k],"_table", sep = ""), temp) #to name data frame by site
}

ошибка - размеры не всегда совпадают или размеры исключают / включают несовпадающие столбцы, отбрасывая соотношение.Я не уверен, как правильно заполнять таблицу df1, перезаписывая ее NA значениями из мужской и женской таблиц.

...