#r #dataframe #subset #sample
#r #фрейм данных #подмножество #образец
Вопрос:
Здесь новичок. Моя проблема состоит из 2 шагов. Я хотел бы выбрать несколько строк (3) из фрейма данных, а затем взять вторую выборку (1 строка), которой нет в первой выборке.
#here is my data frame
df = data.frame(matrix(rnorm(20), nrow=10))
#here is my first sample with 3 rows
sample_1<- df[sample(nrow(df), 3), ]
#here is my second sample
sample_2 <- df[sample(nrow(df), 1), ]
Я хочу, чтобы вторая выборка не была частью первой выборки.
Я ценю вашу помощь. Спасибо!
Привет! Еще раз спасибо за ответ на это. У меня есть дополнительный вопрос к этому. Если бы мне нужно было запустить это на большом наборе данных, используя цикл FOR, чтобы он выполнял код для каждой итерации, но выбирал другую группу при каждом запуске цикла, было бы это возможно?
Комментарии:
1. Не делайте этого в два этапа — выборка 4 строк из фрейма данных, а затем присвоите первые 3 первой выборке, а 4-ю — второй выборке.
Ответ №1:
предложение @GregorThomas, вероятно, является лучшим, учитывая то, что мы знаем: выборка из четырех строк, а затем возьмите одну строку в качестве вашей sample_2
и остальных sample_1
.
set.seed(42)
df <- data.frame(matrix(rnorm(20), nrow=10))
( samples <- sample(nrow(df), size = 4) )
# [1] 6 8 4 9
sample_1 <- df[ samples[-1], ]
sample_2 <- df[ samples[1],,drop = FALSE ]
sample_1
# X1 X2
# 8 -0.09465904 -2.6564554
# 4 0.63286260 -0.2787888
# 9 2.01842371 -2.4404669
sample_2
# X1 X2
# 6 -0.1061245 0.6359504
Однако, если по какой-то причине ваша выборка требует чего-то другого, вы можете ограничить свою вторую выборку теми, которые не включены в первую. Хороший способ — если у вас есть уникальный идентификатор некоторой формы в каждой строке:
df$id <- seq_len(nrow(df))
df
# X1 X2 id
# 1 1.37095845 1.3048697 1
# 2 -0.56469817 2.2866454 2
# 3 0.36312841 -1.3888607 3
# 4 0.63286260 -0.2787888 4
# 5 0.40426832 -0.1333213 5
# 6 -0.10612452 0.6359504 6
# 7 1.51152200 -0.2842529 7
# 8 -0.09465904 -2.6564554 8
# 9 2.01842371 -2.4404669 9
# 10 -0.06271410 1.3201133 10
sample_1 <- df[sample(nrow(df), 3), ]
sample_1
# X1 X2 id
# 6 -0.1061245 0.6359504 6
# 2 -0.5646982 2.2866454 2
# 5 0.4042683 -0.1333213 5
subdf <- df[ !df$id %in% sample_1$id, ]
sample_2 <- subdf[sample(nrow(subdf), 1), ]
sample_2
# X1 X2 id
# 7 1.511522 -0.2842529 7
Комментарии:
1. Привет! Еще раз спасибо за ответ на это. У меня есть дополнительный вопрос к этому. Если бы мне нужно было запустить это на большом наборе данных, используя цикл FOR, чтобы он выполнял код для каждой итерации, но выбирал другую группу при каждом запуске цикла, было бы это возможно?