r - 按唯一 ID 子集数据
问题描述
我尝试根据 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
基于多列数据,删除空列表并使用列表名称写入数据。这可以在基础 R 中完成:
temp <- Filter(nrow, split(mtcars, list(mtcars$cyl, mtcars$carb)))
Map(write.csv, temp, paste0("Subset", names(temp), ".csv"))
或在tidyverse
library(tidyverse)
split(mtcars, list(mtcars$cyl, mtcars$carb)) %>%
keep(~nrow(.x) > 0) %>%
imap(~write.csv(.x, paste0("Subset", .y, ".csv")))
推荐阅读
- javascript - INSERT MySQL 语句:当前值和选定值 INTO VALUES 来自同一个表
- javascript - Div 样式在设置状态后更改,但在不应该时恢复
- json - 如何从 JSON 输出中获取选定的值
- java - 如何在android应用程序中将部分字节数组数据转换为浮点数据类型
- typescript - 扩展字符串文字类型时出现打字稿错误
- javascript - 我对编程还是很陌生,想从头开始编写我的第一段代码。有人可以告诉我为什么这不起作用吗?
- python - AttributeError:“HTTPClient”对象没有属性“send_files”
- javascript - 有没有办法将 ReactJS 中的多项式方程归零,使其 y 截距通过 0,这意味着图形坐标 [x= 0, y = 0]?
- c++ - C++ 天蓝色存储库,stream_buf can_read 返回 false
- python - 在 Django 中使用图像填充表单中的字段