【发布时间】:2020-05-04 03:04:37
【问题描述】:
我尝试根据 ID(可以是任何数字)和一个条件对数据进行子集化。 一个例子可能是;
我有几辆装有不同数量的汽缸和不同数量的化油器的汽车。 我想要每个 cilinders 唯一值的子集。在 cilinders 的子集中,我想要化油器的每个唯一值的子集。
到目前为止,我尝试的是通过唯一数量的 cilinder 对 mtcars 数据进行子集化。 这很好用,它给了我 3 个子集。 我就是用这个来做的;
# Loading
data(mtcars)
mtcars_split <- split(mtcars, mtcars$cyl)
new_names <- c("subset1", "subset2", "subset3", "subset4")
for (i in 1:length(mtcars_split)) {
assign(new_names[i], mtcars_split[[i]])
}
没有使用子集 4,因为 mtcars 数据集中只有三个不同数量的 cilinder。
但是现在我想用化油器的数量对子集 1、子集 2 和子集 3 做同样的事情。
然后我尝试了
#For cylinder 4, carb 1 and 2
mtcars_split2 <- split(subset1, subset1$carb)
new_names <- c("subset1carb1", "subset1carb2")
for (i in 1:length(mtcars_split2)) {
assign(new_names[i], mtcars_split2[[i]])
}
#for cyclinder 6, carb 1,2 and 3
mtcars_split3 <- split(subset2, subset2$carb)
new_names <- c("subset2carb1", "subset2carb2", "subset2carb3")
for (i in 1:length(mtcars_split3)) {
assign(new_names[i], mtcars_split3[[i]])
}
#for cyclinder 8, carb 1,2,3 and 4
mtcars_split4 <- split(subset3, subset3$carb)
new_names <- c("subset3carb1", "subset3carb2", "subset3carb3", "subset3carb4")
for (i in 1:length(mtcars_split4)) {
assign(new_names[i], mtcars_split4[[i]])
}
#etc
但是必须有更简单的方法来做到这一点? 在大型数据集中,这种手动解决方案需要太多时间。 你会得到很多不同的组合,你都必须在某个时候定义它们。
如果 R 能够基于这两个条件自动生成和命名唯一子集,那就太好了。汽缸和化油器。
【问题讨论】:
-
您可以通过多列
split。split(mtcars, list(mtcars$cyl, mtcars$carb)) -
像魅力一样工作!但是我将如何命名或定义我的子集?在某个时候我会有很多组合。 R 不能在基于子集1_6_2、6 个汽缸和 2 个碳水化合物的值导出时命名它们吗?
-
您要将它们导出为单独的 csv 文件还是一个组合的文件?
-
分开,我想导出所有子集,这样我会得到很多文件,但这没关系。关键是他们有一个合适的名字。