#r
Вопрос:
Я работаю с Р.
У меня есть набор данных, который выглядит примерно так…
Condition TargetWord WordProduced WPcondition 1 Target1 table A
1 Target1 word B
1 Target1 chair A
1 Target1 pole C
1 Target1 skate D
1 Target2 car B
1 Target2 house A
1 Target2 shoes A
1 Target2 girl A
1 Target2 life C
2 Target3 computer D
2 Target3 ball B
2 Target3 court F
2 Target3 plane C
2 Target3 sky D
2 Target4 tree A
2 Target4 five C
2 Target4 help D
2 Target4 shave A
2 Target4 love B 3 Target5 table A
3 Target5 word B
3 Target5 chair A
3 Target5 pole C
3 Target5 skate D
3 Target6 car B
3 Target6 house A
3 Target6 shoes A
3 Target6 girl A
3 Target6 life C
3 Target7 computer D
3 Target7 ball B
3 Target7 court F
3 Target7 plane C
3 Target7 sky D
3 Target8 tree A
3 Target8 five C
3 Target8 help D
3 Target8 shave A
3 Target8 love B
Так как условия 1 и 2 имеют 10 наблюдений, а условие 3 имеет 20 наблюдений. Мне нужно выбрать случайную выборку из 10 наблюдений условия 3, чтобы правильно сравнить их.
Поэтому мне нужна новая колонка, которая идентифицирует их в новой колонке, чтобы позже проводить различные анализы. Поэтому, я думаю, я не уверен, что оставшиеся значения условия 3 необходимо идентифицировать как NA, чтобы исключить их из некоторых анализов.
Итак, мне нужна эта новая колонка, потому что для некоторых анализов не имеет значения количество наблюдений, но для некоторых других, например, для t-теста, это имеет значение.
Любая помощь была бы очень кстати.
Спасибо.
Ответ №1:
Это даст вам TRUE
/ FALSE
значения в result
столбце —
library(dplyr)
df %>%
add_count(Condition) %>%
group_by(Condition) %>%
mutate(result = row_number() %in% sample(n(), min(.$n))) %>%
ungroup %>%
select(-n)
# Condition TargetWord WordProduced WPcondition result
# <int> <chr> <chr> <chr> <lgl>
# 1 1 Target1 table A TRUE
# 2 1 Target1 word B TRUE
# 3 1 Target1 chair A TRUE
# 4 1 Target1 pole C TRUE
# 5 1 Target1 skate D TRUE
# 6 1 Target2 car B TRUE
# 7 1 Target2 house A TRUE
# 8 1 Target2 shoes A TRUE
# 9 1 Target2 girl A TRUE
#10 1 Target2 life C TRUE
# … with 30 more rows
Для условия 3 вы получите 10 случайных TRUE
и 10 случайных FALSE
.
add_count
добавляет количество строк для каждой Condition
, так что вы получите 10, 10 и 20 для условия 1, 2 и 3 соответственно. Для каждого Condition
затем мы выбираем min(.$n)
строки, которые здесь равны 10, так как это минимальное количество строк, которое есть в любой группе.
Комментарии:
1. Здравствуйте, не могли бы вы объяснить, что вы сделали в круглой скобке мутировать. Что я понимаю, так это то, что add_count добавляет уникальный номер к каждому наблюдению. Затем вы группируетесь по условию. Но я теряюсь в том, что происходит после «select =» в круглой скобке mutate. Кроме того, что делает select(-n)? Спасибо за это.
2.
select(-n)
удаляет столбецn
, который мы добавилиadd_count
. Чтобы избежать путаницы, я переименовалсяselect
вresult
. Я также добавил некоторое объяснение кода в отредактированный ответ.
Ответ №2:
Следующий код группируется по условиям и выбирает n (10) случайных строк из каждой группы. Если n-наименьшее число из всех групп, вы можете сначала вычислить его и вставить в последний вызов.
library(dplyr)
df %>% group_by(Condition) %>% sample_n(size=10)
Комментарии:
1. Хотя этот фрагмент кода может решить вопрос, включая объяснение , действительно помогает улучшить качество вашего поста. Помните, что в будущем вы будете отвечать на этот вопрос для читателей, и эти люди могут не знать причин вашего предложения кода.