R中是否有一种方法可以将数据帧过滤并将其拆分为新的数据帧?

ny

我有一个包含数十万个条目的数据框,并希望通过几种类型将整个数据框子集化。

数据如下所示:

df <- data.frame(id = c("x12", "x32", "x12", "x123", "x32", "y312", "y312", "z213", "x342", "xs32", "x1f2", "x1r23", "xw32", "y5312", "yf312", "z2z13"), 
date = c("2019-04-01 22:03:12", "2019-01-03 18:03:12", "2019-02-22 23:42:04", "2019-08-01 12:03:42", "2019-03-31 12:53:32", "2019-06-13 09:59:18", "2019-04-01 18:14:52", "2019-07-14 15:02:22",
                     "2019-01-11 12:33:42", "2019-07-17 19:39:28", "2019-05-27 19:44:42", "2019-03-17 15:02:52",
                     "2019-02-22 14:23:22", "2019-05-12 23:79:48", "2019-02-21 12:24:22", "2019-04-12 15:02:32"), 
type = c("blue", "black", "blue", "red", "black", "yellow", "yellow", "green", "blue", "black", "black", "blue", "black", "red", "red", "red"))

df

      id                date   type
1    x12 2019-04-01 22:03:12   blue
2    x32 2019-01-03 18:03:12  black
3    x12 2019-02-22 23:42:04   blue
4   x123 2019-08-01 12:03:42    red
5    x32 2019-03-31 12:53:32  black
6   y312 2019-06-13 09:59:18 yellow
7   y312 2019-04-01 18:14:52 yellow
8   z213 2019-07-14 15:02:22  green
9   x342 2019-01-11 12:33:42   blue
10  xs32 2019-07-17 19:39:28  black
11  x1f2 2019-05-27 19:44:42  black
12 x1r23 2019-03-17 15:02:52   blue
13  xw32 2019-02-22 14:23:22  black
14 y5312                <NA>    red
15 yf312 2019-02-21 12:24:22    red
16 z2z13 2019-04-12 15:02:32    red

我想过滤掉蓝色,红色和黑色类型,并为每种类型创建一个自己的数据框。

设置子集后,我想像这样在新创建的数据框中过滤和变异一些新变量。

df_blue <- df %>% 
  dplyr::filter(type == "blue") %>% 
  dplyr::mutate(bluedate == date) %>% 
  dplyr::group_by(id) %>% 
  dplyr::filter(date == min(date)) 

df_red <- df %>% 
  dplyr::filter(type == "red") %>% 
  dplyr::mutate(reddate == date) %>% 
  dplyr::group_by(id) %>% 
  dplyr::filter(date == min(date))

df_black <- df %>% 
  dplyr::filter(type == "black") %>% 
  dplyr::mutate(blackdate == date) %>% 
  dplyr::group_by(id) %>% 
  dplyr::filter(date == min(date))

因为除类型过滤器和日期名称外,变异和过滤是相同的,所以我想循环执行或应用函数,但不确定如何。

我尝试了一个循环,但到现在为止,只有子集有效,但变异无效:

color <- c("blue", "red", "black")

for (i in color){
assign(paste0("df_", i), subset(df, type == i))
}

我想要这样的东西:

for (i in color){
assign(paste0("df_", i), subset(df, type == i & date == min(date))) %>% 
dplyr::mutate(paste0(i, "date") == date) %>% 
dplyr::group_by(id) %>% 
dplyr::filter(date == min(date))

}

有没有办法做一个循环,使用Apply或我不需要重复的更好的方法?

阿克伦

我们可以使用分组依据 filter

library(dplyr)
filter df %>%
   mutate(date = as.Date(date)) %>% 
   group_by(type, id) %>%
   filter(date == min(date))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

R-是否有一种方法可以将具有可变行数的列表组合到数据帧

在R中,是否有一种方法可以在仅提取部分列名的同时收集数据帧?

在R中,是否有一种方法可以将一个数据帧中的列与另一数据帧中的值重新编码?

有没有一种方法可以基于多个数据帧中的操作在R中创建新列?

熊猫中是否有一种方法可以在一个数据帧中计数(Excel中的Countifs)并在另一个长度不同的数据帧中将计数添加为新列?

有没有一种方法可以根据以前发生的列x中的值来过滤数据帧?

有没有一种方法可以匹配两个数据帧中的序列号,并将df2中的系列列表(行)添加到df1中的新列(Python,pandas)

有没有一种方法可以从另一个行长不确定的数据帧中动态生成数据帧?

有没有一种方法可以在 Pandas 中的数据帧列上扩展操作?

有没有一种方法可以绑定数据帧中不同数量的行?

有没有一种方法可以更改数据帧字典中的数据帧的列中的值?

在Python中,有没有一种方法可以从循环创建数据帧并使用数据帧名称中的数字?

有没有一种方法可以过滤一个数据帧以将与另一个数据帧中的值匹配的值保留?

有没有一种方法可以将较大列表中的数据帧列表汇总在一起?

有没有一种方法可以删除输入到R中toJSON函数的数据帧的输出中的引号?

有没有一种方法可以将数据帧中的排序值分配给基于交替元素的组

有没有一种方法可以使用字典的值作为数据帧的名称将csv文件导入到熊猫中?

是否有一种简单的方法来将数据帧中的唯一数据点配对?

R中有一种方法可以使用DBI库中的dbWriteTable实现apply函数,以一次将多个数据帧加载到SQL中

有没有一种方法可以计算出数据帧每一列中NA的百分比,而将df分为不同的组呢?

有没有一种方法可以使用dplyr :: bind_rows而不从数据库中收集数据帧?

有没有一种方法可以逐步计算列的数据帧的平均值?

有没有一种方法可以在特定位置“重叠”两个(熊猫)数据帧?

有没有一种方法可以基于行索引向量获取数据帧行?

将数据帧拆分为新数据帧时的命名

有没有一种方法可以从所有30个数据帧中仅提取一列?

有没有一种方法可以使用数据帧内容作为索引来更改数据帧内容的范围?

有没有一种方法可以在计算数据帧中的异常值时排除NA,但最终输出中仍包含具有NA的行?

有没有一种方法可以检查丢失的数据并将其加载到SQL?