оператор if в R - PullRequest
0 голосов
/ 17 мая 2018

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

library(Benchmarking)
x <- c(4,2,4,6,9,2)
y <- c(2,1,5,2,10,4)
k <- c(25,25,25,30,30,30)
d <- data.frame(x,y,k)

Теперь я хочу сделать следующий расчет:

e1 <- dea(d$x, d$y, XREF = d$x, YREF = d$y)

Но я хочу изменить его, поэтому XREF и YREFучитывайте только столбец x в d, если k = 25.Что-то вроде:

e1 <- dea(d$x, d$y, XREF = d$x if k = 25, YREF = d$y if k = 25)

Но это не работает.Может кто-нибудь показать мне, как кодировать это в R?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

with(subset(d, k == 25), dea(d$x, d$y, XREF = x, YREF = y))

Где d$ нотация использует исходные полные данные, а прямые x и y относятся к переменным из subset.

0 голосов
/ 17 мая 2018

Если я правильно интерпретирую ваш вопрос, вы можете легко использовать это apply.

Если вы хотите, чтобы XREF и YREF учитывали только столбец x, когда k = 25, то:

apply(d, 1, function (df) if (df["k"] == 25) {
  dea(df["x"], df["y"], XREF = df["x"], YREF = df["x"]) 
  } else {
      dea(df["x"], df["y"], XREF = df["x"], YREF = df["y"])
    }
)

Это отличается от примера кода, который вы показываете.Это было бы эквивалентно:

apply(d, 1, function (df) if (df["k"] == 25) {
  dea(df["x"], df["y"], XREF = df["x"], YREF = df["y"]) 
  } else {
      dea(df["x"], df["y"])
    }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...