Я пытаюсь выбрать диапазон значений в рамках большего цикла в R. По мере продвижения цикла к каждой строке j
я хочу выбрать число между значением, указанным в столбце start
изначение, указанное в столбце end
, помещающее это значение в столбец sampled
для этой строки.
Результаты должны выглядеть примерно так:
ID start end sampled
a 25 67 44
b 36 97 67
c 23 85 77
d 15 67 52
e 21 52 41
f 43 72 66
g 39 55 49
h 27 62 35
i 11 99 17
j 21 89 66
k 28 65 48
l 44 58 48
m 16 77 22
n 25 88 65
Я начал использовать mapply
, который сэмплирует весь df, но затем я пытаюсь поместить все 15 сэмплированных значений водна строка.
df[j,4] <- mapply(function(x, y) sample(seq(x, y), 1), df$start, df$end)
Я подумал, что, возможно, что-то, использующее seq
, может работать, но это приводит к ошибкам, говорящим, что from
должно иметь длину 1.
df[j,4] <- sample(seq(df$start, df$end),1,replace=TRUE)
Структура внешнего цикла довольно сложна, поэтому я не включил ее здесь, но часть кода df[j,4]
необходима, поскольку она является частью большего цикла. Существуют ситуации, когда строки должны быть пересчитаны на основе дополнительных зависимостей в фактическом наборе данных. Например, значение выборки a
может быть больше b
. Остальная часть кода обновляет столбец выборки, проверяет наличие зависимостей и повторно запускает образец, если зависимости не встречаются. Если мне удастся заставить этот раздел сэмплирования работать, я смогу подключить его без особых проблем (надеюсь).
Вот пример набора данных.
structure(list(ID = c("a", "b", "c", "d", "e", "f", "g", "h",
"i", "j", "k", "l", "m", "n"), start = c(25, 36, 23, 15, 21,
43, 39, 27, 11, 21, 28, 44, 16, 25), end = c(67, 97, 85, 67,
52, 72, 55, 62, 99, 89, 65, 58, 77, 88), sampled = c(NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), class = c("spec_tbl_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -14L), spec = structure(list(
cols = list(ID = structure(list(), class = c("collector_character",
"collector")), start = structure(list(), class = c("collector_double",
"collector")), end = structure(list(), class = c("collector_double",
"collector")), sampled = structure(list(), class = c("collector_logical",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 1), class = "col_spec"))```