我想子集化然后将列添加到 R 中的一堆单独的数据框中。最简单和最快的方法是什么?

问题描述 投票:0回答:1

刚刚接触数据分析,这是我的第一篇文章。

我在 R 中有 12 个数据帧,我需要首先从中提取子集,然后添加一堆列。我目前的解决方案是一遍又一遍地复制/粘贴相同的代码块并编辑每个相应数据框的数字,但这显然效率低下并且不适合未来的实践。

这就是我目前对数据进行子集化的方式:

sub_202212 <- subset(
  cyclistic202212,
  select = c(ride_id, rideable_type, started_at, ended_at, member_casual))

这就是我目前添加列的方式:

sub_202202$month <- format(as.Date(sub_202202$date), "%m")
sub_202202$day <- format(as.Date(sub_202202$date), "%d")
sub_202202$year <- format(as.Date(sub_202202$date), "%Y")
sub_202202$day_of_week <- format(as.Date(sub_202202$date), "%A")

我想知道是否有一个“批处理”可以大大缩短我的代码。

更好的是,请让我知道是否还有一种方法可以在同时添加列的同时对列进行子集化(因为它在所有 DF 中都是相同的加法/减法)。

如果有人问过类似的问题(但措辞更好,这可能是我没有找到它的原因),那么请指出我的方向。这对我来说都是全新的,我还有很多东西要学。

任何见解将不胜感激。 :)

编辑:示例代码

df1 <- data.frame(id = c(1, 2, 3, 4, 5),
                  trips = c(3, 6, 3, 7, 8))
df2 <- data.frame(id = c(6, 7, 8, 9, 10),
                  trips = c(3, 5, 2, 7, 10))
r performance subset batch-processing mutate
1个回答
0
投票

此代码将读取路径中的所有 csv 文件(我建议您创建一个地方,只放置您想要更改的数据框),进行更改,然后以相同的名称导出


library(tidyverse)
for(i in list.files(path = "your path", pattern = "*.csv")){
  df <- read_csv(i)
  df %>% mutate(month = format(as.Date(date), "%m"), 
                day = format(as.Date(date), "%d"),
                year = format(as.Date(date), "%Y"),
                day_of_week = format(as.Date(date), "%A")) %>% 
    select(ride_id, rideable_type, started_at, ended_at, member_casual, month,
           day, year, day_of_week) %>% write_csv(i)
}
© www.soinside.com 2019 - 2024. All rights reserved.