刚刚接触数据分析,这是我的第一篇文章。
我在 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))
此代码将读取路径中的所有 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)
}