R 中的串行子集化

Serial Subsetting in 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))

提取 A 级值

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)))

类似地提取 new_b 中 B 级的值并结合进行任何分析。

我们可以使用

您可以 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])
             }
          }))