Как взять выборку из двух столбцов фрейма данных R совместно? - PullRequest
0 голосов
/ 29 октября 2019

У меня есть фрейм данных с 4 столбцами. Я пытаюсь перемешать два столбца фрейма данных вместе, чтобы эти два столбца всегда были связаны.

Я пробовал функцию «выборка», но она ограничена только одним столбцом фрейма данных.


data = data.frame(label=letters[1:5], label2=letters[1:15], number=11:15)
data = within(data, numbersq <- (number*number))

# lable lable2 number numbersq
#   a     a      11     121
#   b     b      12     144
#   c     c      13     169
#   d     d      14     196
#   e     e      15     225

#Now, I want to twick the data something like, columns 'lable' and 'lable2' remains as it is and columns 'number' and 'numbersq' should shufffle. 
#As you can see in the desired output,'number' and 'numbersq' should shuffled together not separately.

#Desired Output

# lable lable2 number numbersq
#   a     a      15     225
#   b     b      13     169
#   c     c      14     196
#   d     d      12     144
#   e     e      11     121

I have tried he following code but seems it shuffles the columns separately.

data_2 = data.frame(data_2$label, data_2$label2, sample(data_2$number), sample(data_2$numbersq))

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Большое спасибо за предложения. Наконец-то я получил решение. Код как ниже. Я считаю, что код все еще можно оптимизировать.


data <- data.frame(label=letters[1:5], lable2=letters[1:5], number=11:15)
data = within(data, numbersq <- (number*number))
print(data)

# lable lable2 number numbersq
#   a     a      11     121
#   b     b      12     144
#   c     c      13     169
#   d     d      14     196
#   e     e      15     225


data_2a = data[,1:2]
data_2b = data[,3:4]
data_2b_samp = data_2b[sample(nrow(data_2b)), ]

data_3 = cbind(data_2a, data_2b_samp)

print(data_3)

# lable lable2 number numbersq
#   a     a      15     225
#   b     b      13     169
#   c     c      14     196
#   d     d      12     144
#   e     e      11     121

0 голосов
/ 29 октября 2019

Взять образец строк, например, если вы хотите образец из 5 строк

set.seed(1)
row_sample <- sample(1:nrow(data),5)
data[row_sample,]
#  label lable2 number numbersq
#7     g      g     17      289
#2     b      b     12      144
#3     c      c     13      169
#8     h      h     18      324
#1     a      a     11      121
...