2017-01-24 2 views
0

Я попытался отобразить значения двух столбцов, которые связаны (коэффициенты диверсификации нескольких групп синтаксиса), но я понятия не имею, как это сделать. Я пытаюсь с функцией sample, но это ограничивает меня, поэтому я не могу выбрать никаких дополнительных условий.Примеры переменных из двух столбцов в R

df<-data.frame("M"=c(0.06,0.14,0.05,0.07), "H"=c(0.06,0.08,0.04,0.05)) 
    df 
#  M H 
# 1 0.06 0.06 
# 2 0.14 0.08 
# 3 0.05 0.04 
# 4 0.07 0.05 

    sample(df,size=1000,replace=TRUE) 

Когда я использую эту команду, она передискретизирует строки и столбцы:

 H M M.1 M.2 M.3 
1 0.06 0.06 0.06 0.06 0.06 
2 0.08 0.14 0.14 0.14 0.14 
3 0.04 0.05 0.05 0.05 0.05 
4 0.05 0.07 0.07 0.07 0.07 
... 

Но я хочу это только образец одного значения из каждой строки и перейти к следующей строке с тем же условием до конец строк. Наконец, когда больше нет строк, он должен начинаться сначала с size=1000, поэтому я могу иметь вектор длиной 1000.

Пример того, что я хочу (r = row, c = column): 0.06 (r1c1), 0.14 (r2c1), 0.05 (r3c1), 0.05 (r4c2), 0.06 (R1C2), 0.14 (r2c1), 0.03 (r3c2), 0.07 (r4c1) и так далее.

Заранее благодарю вас за помощь!

Редакция:

Я думаю, что я ищу что-то вроде функции петли, но я до сих пор не знаю, как это сделать.

ответ

3

Сначала вы должны создать матрицу индексирования из двух столбцов (индекс строки и индекс столбца), а затем проиндексировать ее исходную матрицу.

idx <- matrix(c(rep(1:4,250), sample(1:2, 1000, replace=T)), ncol=2) 
res <- as.matrix(df)[idx] 
0

В соответствии с вашими спецификациями вам потребуется использовать пользовательскую функцию.

Вот один маленький способ сделать это:

myfunc <- function(dataframe, nsamples = 1000){ 
    rows = ((0:nsamples)%%nrow(df)) + 1 #use the %% to get the row to sample 
    cols = sample(ncol(df), nsamples, replace = TRUE) #and the cols 
    sapply(1:nsamples, function(x){df[rows[x],cols[x]]}) #sapply to get as a vector 
} 
myfunc(df,10) 
[1] 0.08 0.05 0.07 0.06 0.08 0.05 0.05 0.06 0.08 0.05 
Смежные вопросы