Удалить дублированные результаты во вложенном цикле в R - PullRequest
0 голосов
/ 22 сентября 2018

Об этом уже спрашивали, но без правильных ответов (или ответов, которые я мог понять), насколько я знаю.Как удалить дублированные результаты во вложенном цикле foreach, если длина внешнего цикла не идентична?

Воспроизводимый пример:

library(RCurl)
library(doParallel)
library(foreach)
library(data.table)
library(dplyr)

dt <- getURL("https://raw.githubusercontent.com/Zhaoju-
Deng/farm/master/dt.csv")
dt <-fread(dt,  drop = 1)
makeCluster(detectCores())
n_cow <- dt%>%group_by(farm_id)%>%summarise(n_cow = 
length(unique(cow_id))) # number of cows per farm
n_cow <- n_cow[order(n_cow$farm_id), ] # order number of cows, max =463
y <- foreach(i =1:5, .combine = "cbind")%do%{
       foreach(j = unique(dt$cow_id[which(dt$farm_id==i)]),.combine ="c")%dopar%{
       mean(dt$scc[which(dt$cow_id ==j)], na.rm = T) # calculate the mean of SCC per cow on each farm
   }
}

y <- as.data.frame(y) 
y <- y[order(y$result.1), ]#  463 rows, duplicated rows for farms with less than 463 cows 



 y <- foreach(i =1:5, .combine = "c")%do%{
    foreach(j = unique(dt$cow_id[which(dt$farm_id==i)]),.combine 
      ="c")%dopar%{
        mean(dt$scc[which(dt$cow_id ==j)], na.rm = T)
     }
   } # this gives me an distinct vector, but I prefer to the data.frame with each farm as a row or column

sessionInfo()
  R version 3.4.4 (2018-03-15)
  Platform: x86_64-pc-linux-gnu (64-bit)
  Running under: Ubuntu 16.04.5 LTS

  doParallel_1.0.11 
  foreach_1.4.4  

Я пытался также с итераторамипакет, но также с дублированными результатами.

...