Разделение фрейма данных случайным образом, но с сохранением идентичных значений - PullRequest
0 голосов
/ 08 февраля 2019

У меня большой набор данных, с которым я пытаюсь работать.В настоящее время я пытаюсь разделить свой набор данных на три разных фрейма данных, которые будут использоваться для разных точек тестирования.

ind<-sample(3, nrow(df1), replace =TRUE, prob=c(0.40, 0.50, 0.10))
df2<-as.data.frame(df1[ind==1,1:27])
df3<-as.data.frame(df1[ind==2, 1:27])
df4<-as.data.frame(df1[ind==3,1:27])

Однако первый столбец в df1 - это номер счета, и несколько строк могутиметь тот же номер счета, так как возвращаются и ошибки включены.Я пытаюсь найти способ случайного разделения данных, но объединить все строки с одним и тем же номером счета.

Есть предложения о том, как мне это удастся сделать?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019
ind1 <- which(df1[,1] == 1)
ind2 <- which(df1[,1] == 2)
ind3 <- which(df1[,1] == 3)

df2 <- as.data.frame(df1[sample(ind1, length(ind1), replace = TRUE), 1:27])
df3 <- as.data.frame(df1[sample(ind2, length(ind2), replace = TRUE), 1:27])
df4 <- as.data.frame(df1[sample(ind3, length(ind3), replace = TRUE), 1:27])

ind определяет, какие строки содержат номера счетов 1,2,3.Затем для создания случайных кадров данных берется случайная выборка только из тех строк, которые вы хотите.Надеюсь, это поможет.

0 голосов
/ 08 февраля 2019

Вместо выборки строк можно выбрать уникальные номера счетов-фактур, а затем выбрать строки с этими номерами счетов-фактур.

## Some sample data
df1 = data.frame(invoice=sample(10,20, replace=T), V = rnorm(20))

## sample the unique values
ind = sample(3, length(unique(df1$invoice)), replace=T)

## Select rows by sampled invoice number
df1[df1$invoice %in% unique(df1$invoice)[ind==1], 1:2]
   invoice           V
2        8 -0.67717939
6        9 -0.89222154
9        8 -0.71756069
14       8 -0.03539096
15       2  0.38453752
16       9 -0.16298835
17       9 -0.30823521
20       2 -0.60198259
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...