Просто посмотрите на ваши первые три строки и сделайте некоторые предположения (добавив столбцы id и endowment) ...
DF = data.frame(
id = 1:3,
endowment = c(0L, 1L, 1L),
WTA = c(NA, 20, 10),
WTP.1 = c(15, NA, NA),
WTP.2 = c(5, NA, NA)
)
id endowment WTA WTP.1 WTP.2
1 1 0 NA 15 5
2 2 1 20 NA NA
3 3 1 10 NA NA
Я бы порекомендовал форматировать это последовательно для покупателей и продавцов:
prefs = data.frame(id = rep(1:3, c(2,1,1)), quantity = c(1L,2L,-1L,-1L), valuation = c(15,20,-20,-10))
id quantity valuation
1 1 1 15
2 1 2 20
3 2 -1 -20
4 3 -1 -10
players = data.frame(id = 1:3, endowment = c(0L, 1L, 1L))
id endowment
1 1 0
2 2 1
3 3 1
R-код, который я бы использовал, чтобы получить от DF ...
library(data.table)
players = DF[, c("id", "endowment")]
prefs = melt(data.table(DF), id = "id", measure.vars = patterns("^WT"), na.rm = TRUE)
# translate
prefs[variable == "WTA", `:=`(quantity = -1L, valuation = -value)]
prefs[variable %like% "WTP", `:=`(quantity = 1:.N, valuation = cumsum(value)), by=id]
# clean up
prefs[, c("variable", "value") := NULL]