#r #filter #iteration
Вопрос:
Я ищу способ фильтрации фрейма данных в разных подмножествах, применяя разные условия к столбцу. И создайте новый фрейм данных
другими словами, я ищу функцию, способную это сделать
require(dplyr) df #dataframe dfa lt;- df %gt;% filter(., group = "a") #the variable 'group' with the label 'a dfb lt;- df %gt;% filter(., group = "b") #the variable 'group' with the label 'b' dfc lt;- df %gt;% filter(., group = "c") #the variable 'group' with the label 'c' #ect...
мои идеи состоят в том, чтобы извлечь такие уровни
lev lt;- levels(df$group)
а затем используйте lapply
функцию, чтобы повторить ее для каждого уровня. Но у меня возникают проблемы с настройкой. И я не знаю, как генерировать новые кадры данных в процессе итерации…
Редактировать
Существует образец фрейма данных
df lt;- structure(list(group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("1", "2"), class = "factor"), name = structure(c(1L, 2L, 2L, 3L, 1L, 4L, 3L, 4L, 1L, 1L, 3L, 1L, 3L, 2L, 1L, 2L, 4L, 3L, 2L, 1L, 2L, 3L, 4L, 1L, 1L, 3L, 2L, 1L, 2L, 3L, 3L, 2L, 4L, 2L, 3L, 3L, 3L, 2L, 2L, 2L, 1L, 2L, 1L, 3L, 2L, 4L, 4L, 2L, 1L, 2L, 2L, 1L, 3L, 1L, 2L, 1L, 2L, 2L, 3L, 3L, 1L, 2L, 1L, 2L, 2L, 4L, 1L, 3L, 3L, 2L, 3L, 3L, 3L, 2L, 1L, 2L, 1L, 4L, 3L, 2L, 4L, 4L, 1L, 1L, 2L, 3L, 2L, 2L, 2L, 3L, 4L, 3L, 2L, 4L, 3L, 3L, 3L, 2L, 3L, 1L, 1L, 3L, 1L, 2L, 4L, 1L, 2L, 1L, 1L, 3L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 4L, 4L, 2L, 3L, 4L, 3L, 3L, 1L, 3L, 1L, 2L, 4L, 4L, 4L, 4L, 1L, 4L, 3L, 4L, 2L, 2L, 3L, 4L, 4L, 3L, 4L, 4L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 2L, 1L, 3L, 2L, 2L, 3L, 1L, 3L, 4L, 4L, 3L, 4L, 1L, 4L, 2L, 2L, 1L, 3L, 3L, 1L, 2L, 3L, 3L, 2L, 2L, 3L, 2L, 4L, 3L, 2L, 4L, 3L, 2L, 3L, 1L, 4L, 1L, 2L, 3L, 2L, 4L, 4L, 4L, 3L, 1L, 3L, 4L, 4L, 3L, 1L, 4L, 4L, 2L, 3L, 4L, 2L, 3L, 4L, 4L, 2L, 3L, 4L, 1L, 2L, 3L, 2L, 4L, 2L, 4L, 3L, 4L, 2L, 3L, 3L, 2L, 3L, 3L, 1L, 4L, 4L, 3L, 2L, 3L, 2L, 2L, 4L, 3L, 4L, 1L, 2L, 1L, 1L, 4L, 2L, 1L, 1L, 3L, 2L, 4L, 1L, 3L, 1L, 4L, 3L, 2L, 4L, 2L, 2L, 4L, 3L, 2L, 1L, 1L, 3L, 1L, 1L, 4L, 3L, 4L, 1L, 4L, 3L, 1L, 4L, 3L, 4L, 4L, 2L, 4L, 1L, 4L, 1L, 4L, 2L, 4L, 2L, 4L, 3L, 3L, 4L, 1L, 1L, 4L, 1L, 4L, 1L, 1L, 4L, 2L), .Label = c("a", "b", "c", "d"), class = "factor"), value = c(30.868878, 0.062792, 0.064722, 61.76918, 30.66711, 2.3871e-05, 61.54933, 3.3162e-08, 29.943615, 29.14588, 62.29323, 30.698678, 62.1702, 0.06528, 28.045121, 0.056081, 3.4555e-05, 67.1306, 0.064405, 30.311288, 0.056603, 96.05593, 5.51e-05, 30.366509, 30.857624, 67.12948, 0.06739, 30.090438, 0.050491, 62.18732, 67.2805, 0.065279, 4.4343e-05, 0.032346, 60.69389, 63.36837, 65.74601, 0.33342, 0.054247, 0.077428, 30.882144, 0.045052, 30.306097, 65.9595, 0.041635, -2.705e-06, 3.8342e-05, 0.061501, 29.920227, 0.0379, 0.040964, 30.863306, 67.52386, 30.156661, 0.057475, 30.867581, 0.048172, 0.03641, 66.9387, 67.41591, 30.652644, 0.069988, 30.727157, 0.059174, 0.051819, 6.0334, 28.61209, 63.60349, 62.52879, 0.042666, 60.55028, 62.85379, 74.62217, 0.066198, 27.987038, 0.048742, 30.05475, 3.2355e-05, 60.8441, 0.055797, 4.3442e-05, 5.5346e-05, 30.056956, 30.676426, 0.035604, 68.52414, 0.057717, 0.09971, 0.08597, 61.83881, 1.5293e-05, 64.70352, 0.05464, 7.355e-05, 65.3831, 61.33682, 72.37654, 0.058391, 66.69953, 28.394395, 30.243572, 72.60976, 28.702126, 0.052706, 9.4268e-05, 30.69675, 0.042419, 30.735693, 29.437261, 63.00787, 0.045357, 1.5938, 0.0595, 65.15357, 61.27723, 65.263, 28.597913, 8.5219e-05, 5.6076e-05, 0.061616, 65.16801, -4.676e-06, 62.87619, 118.19605, 31.237558, 71.39104, 30.896975, 0.047113, 9.6642e-05, 4.4772e-05, 2.7448e-05, 2.4296e-05, 28.773587, -7.32e-07, 62.65871, 4.345e-05, 0.33907, 0.04343, 113.06933, 9.2574e-06, 4.4781e-05, 61.83328, 5.324e-05, 7.7977e-05, 30.898415, 30.620734, 28.790323, 61.65496, 66.5346, 61.28427, 71.28221, 0.056823, 30.765944, 91.25581, 0.054061, 0.051203, 61.76252, 30.83635, 62.37974, 5.0292e-05, 2.4479e-05, 67.12157, 9.5559e-05, 30.009091, 3.0644e-06, 0.033829, 0.041163, 30.848661, 65.79429, 67.46681, 30.785285, 0.15129, 70.18517, 64.23277, 0.088034, 0.052606, 61.58522, 0.14265, 1.1295e-05, 61.46163, 0.29846, 2.6735e-05, 66.63594, 0.059632, 116.70889, 30.745654, 1.3743e-05, 29.345573, 0.065551, 60.71106, 0.047953, 8.7875e-06, 7.3588e-05, 4.3058e-05, 67.33211, 29.662684, 64.65532, 6.6811e-05, -9.957e-07, 66.13292, 30.595709, 3.4998e-05, 0.00011454, 0.048417, 60.53301, 1.3004e-05, 0.068605, 65.22992, 2.8757e-06, 2.4577e-05, 0.04427, 62.16205, 4.3647e-05, 29.97387, 0.042776, 77.6753, 0.048735, 0.13577, 0.036806, 6.9006e-05, 84.94532, 9.7338e-05, 1.3316, 68.88738, 115.99801, 0.05736, 60.69266, 67.15351, 30.156764, 5.3195e-05, 3.4649, 79.33051, 0.06558, 69.3476, 0.085893, 0.058569, 3.8985e-05, 64.3347, 4.2267e-05, 29.406443, 0.64823, 30.714088, 30.854511, 5.1728e-05, 0.036175, 29.618613, 30.753743, 61.61991, 0.058629, 1.1714e-05, 29.226482, 68.83065, 30.899018, 6.1703e-05, 66.36974, 0.065556, 2.5469e-05, 0.067354, 4.1394, 2.7652e-05, 114.65137, 0.055644, 29.133173, 30.593966, 65.28648, 29.189217, 29.779958, 33.28, 61.27462, 4.0703e-05, 28.474595, 6.0563e-06, 65.58681, 27.752404, 7.3361e-05, 65.78799, 0.024518, -1.355e-05, 0.046811, 8.2334e-05, 29.919622, 1.3879e-05, 30.358172, -1.022e-05, 0.034263, 5.5449e-05, 0.040798, 8.2063e-05, 61.47507, 61.85918, 4.4857e-05, 30.592282, 30.562771, 0.00010078, 30.602541, 1.2156e-06, 28.494021, 30.2751, 4.6385e-05, 0.055263)), row.names = c(NA, -300L), groups = structure(list( group = structure(1L, .Label = c("1", "2"), class = "factor"), .rows = structure(list(1:300), ptype = integer(0), class = c("vctrs_list_of", "vctrs_vctr", "list"))), row.names = c(NA, -1L), class = c("tbl_df", "tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", "tbl_df", "tbl", "data.frame"))
Комментарии:
1. Пожалуйста, покажите небольшой воспроизводимый пример, ваш
filter
может не работатьgroup =
вместоgroup ==
того, чтобы, возможно, вам нужна группа по операции, т. е.df %gt;% group_by(group) %gt;% ...
2. Кроме того, если вам нужно создать разные фреймы данных, возможно, было бы более полезно сохранить список фреймов данных, поскольку R обладает множеством функций, связанных с повторением списков, а не хранить их как отдельные объекты фрейма данных.
3. Я думаю, что смысл комментария акруна выше заключается в том, чего вы пытаетесь достичь/каков ваш ожидаемый результат. Возможно, нет необходимости разбивать ваш фрейм данных. Также примером размещенного фрейма данных является сгруппированный фрейм данных.
4. Вы что-то ищете
split(df, df$name)
?