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])
}
}))
我正在处理大型数据集。我必须从一个数据集中提取值,这些值的标识符存储在另一个数据集中。所以基本上我为一个类别的每个值进行了两次子集化。对于多个类别,我必须组合这样的双子集值。所以我正在做类似于下面所示的事情,但我认为一定有更好的方法来做。
示例数据集
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])
}
}))