Рассчитать с помощью цикла в R - PullRequest
0 голосов
/ 26 апреля 2018

Рассмотрим следующие фреймы данных:

x1 <- matrix(c(100,200,300,500),ncol=1,dimnames=list(LETTERS[1:4],"x"))
y1 <- matrix(c(75,100,300,400),ncol=1,dimnames=list(LETTERS[1:4],"y"))
datamichael <- data.frame(x1,y1)
x2 <- matrix(c(200,50,200,600),ncol=1,dimnames=list(LETTERS[1:4],"x"))
y2 <- matrix(c(100,100,400,300),ncol=1,dimnames=list(LETTERS[1:4],"y"))
dataewan <- data.frame(x2,y2)
x3 <- matrix(c(100,150,400,200),ncol=1,dimnames=list(LETTERS[1:4],"x"))
y3 <- matrix(c(100,100,400,300),ncol=1,dimnames=list(LETTERS[1:4],"y"))
datatom <- data.frame(x3,y3)

Я объединил эти три data.frame в:

datamichaeldataewan <- rbind(datamichael,dataewan)
datamichaeldatatom <- rbind(datamichael,datatom)

Используя пакет Benchmarking Я хочу сделать следующеевычисление:

library(Benchmarking)
effmichaelewan <- dea(data.frame(datamichaeldataewan[1]),
                      data.frame(datamichaeldataewan[2]),
                      RTS="crs", ORIENTATION="out",
                      XREF=datamichael$x1, YREF=datamichael$y1)
effmichaeltom <- dea(data.frame(datamichaeldatatom[1]),
                     data.frame(datamichaeldatatom[2]),
                     RTS="crs", ORIENTATION="out",
                     XREF=datamichael$x1, YREF=datamichael$y1)

Проблема в моем случае состоит в том, что у меня есть более двух объединенных данных.Так можно ли сделать расчет выше, используя цикл?Важно то, что имя выходной переменной - «eff [name-after-first-data] [name-after-second-data]».И это: datamichaeldataewan меняется в каждом расчете:

dea(data.frame(datamichaeldataewan[1]),
    data.frame(datamichaeldataewan[2]),
    RTS="crs", ORIENTATION="out",
    XREF=datamichael$x1, YREF=datamichael$y1)

1 Ответ

0 голосов
/ 26 апреля 2018

Если вы храните объединенные кадры данных в списке, это можно легко переписать.

Храните dataframe s в list и rbind с datamichael, используя lapply:

datalist <- list(dataewan = dataewan, datatom = datatom)
datalist <- lapply(datalist, function(x) rbind(datamichael, x))
names(datalist) <- paste0("datamichael", names(datalist))

Рассчитать результаты с помощью lapply:

efflist <- lapply(datalist, function(x) 
  dea(data.frame(x[1]), data.frame(x[2]), RTS="crs", ORIENTATION="out", 
      XREF=datamichael$x1, YREF=datamichael$y1)) 
names(efflist) <- paste0("eff", gsub("data", "", names(efflist)))

efflist
# $effmichaelewan
#     A     B     C     D    A1    B1    C1    D1 
# 2.667 4.000 2.000 2.500 4.000 1.000 1.000 4.000 
# 
# $effmichaeltom
#     A     B     C     D    A1    B1    C1    D1 
# 2.000 3.000 1.500 1.875 1.500 2.250 1.500 1.000 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...