У меня есть огромный фрейм данных с совпадающими объектами управления тегами. Соответствующий регистр: управление - 1: 3. Я пытаюсь выполнить повторную выборку идентификаторов case, а затем извлеките соответствующие элементы управления.Как подмножать одни и те же строки/идентификаторы повторно в r
Итак, у меня есть вектор идентификаторов, где идентификаторы можно повторить. Я хочу извлечь данные для случаев и элементов управления для каждого идентификатора вектора. Корпус и соответствующие элементы управления имеют одинаковый case_num. % In% всегда принимает уникальные идентификаторы из данных. Я использовал llply, чтобы сделать это. Это занимает около 2,5 секунд. Есть ли другой эффективный способ?
Я включаю простой пример и мое решение вопроса.
В моем случае длина вектора id в 1921 году функция должна извлекать элементы управления 1921 раз. Поэтому, если время можно уменьшить даже на секунду, это будет на самом деле много, в то время как я буду повторять весь процесс 1000 раз. Спасибо!
test_data=
data.frame(id=c(1,1,2,4,4,5,6),value=c('g','e','r','j','a','b','c'))
test_data
id value
1 1 g
2 1 e
3 2 r
4 4 j
5 4 a
6 5 b
7 6 c
id_vec= c(1,4,1,5)
library(plyr)
newdata.list=llply(id_vec, function(x) test_data[test_data$id==x,])
## or if we make our data a data.table then
library(data.table)
test_data= data.table(test_data)
newdata.list=llply(id_vec, function(x) test_data[id==x])
library(dplyr)
newdata.frame= bind_rows(newdata.list) ### making it a dataframe
newdata.frame
id value
1: 1 g
2: 1 e
3: 4 j
4: 4 a
5: 1 g
6: 1 e
7: 5 b
Pls размещать данные как текст, а не в виде изображения. Используйте 'dput (your_data)' и скопируйте-вставьте результат. – GGamba
сделал изменения, также добавил коды после получения комментариев. –
Наверное, безопасно не смешивать plyr + dplyr + data.table; лучше просто выбрать 1. Plyr существенно заменил dplyr, поэтому, вероятно, не тот. – Frank