2015-06-20 3 views
0

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

пример набора данных

set.seed(1) 
df <- data.frame(number= seq(5020, 5035, 1), value =rnorm(16, 20, 5), 
     type = rep(c("food", "bar", "sleep", "gym"), each = 4)) 

df2 <- data.frame(number= seq(5020, 5035, 1), type = rep(LETTERS[1:4], 4)) 

значение экстракта для марки А

asub_df2 <-subset(df2, type == "A") 
asub_df <-subset(df, number == asub_df2$number) 
new_a <- cbind(asub_df, grade = rep(c("A"),nrow(asub_df))) 

аналогично извлечь значение для класса B в new_b и объединяются, чтобы сделать какой-либо анализа.

мы можем использовать

+0

привет akrun, у меня не было много практики 'lapply' и т.д. может у разработать, как я могу использовать его ? – pdm

+0

Возможно, 'lapply (split (df2, df2 $ type), function (x) transform (subset (df, number == x $ number), grade = x $ type [1]))' – akrun

+0

'df2 <- data. frame (number = seq (5020, 5035, 1), type = rep (ПИСЬМА [1: 4], 4)) 'это то, что вы просите меня показать? – pdm

ответ

1

Вы можете split в «df2» и использовать lapply

Filter(Negate(is.null), 
    lapply(split(df2, df2$type), function(x) { 
     x1 <- subset(df, number==x$number) 
      if(nrow(x1)>0) { 
      transform(x1, grade=x$type[1]) 
      } 
      })) 
Смежные вопросы