R回路和滤波器

时间:2019-02-21 00:45:14

标签: r loops dplyr

所以我不怎么问这个问题,我也很难搜寻,所以我想问一下用实际代码会更好。

我是R的新手,我想自学,到目前为止,我已经学习了基础知识,但是我遇到了一种情况,我认为循环遍历是一个更好的选择,但我不知道从哪里开始。

现在,我只是在随机制作csv文件,其中包含所有状态,但多个相同条目只是为了娱乐。

我已经学习了库“ dplyr”,可以按主题过滤

因此:

temp <- filter(states, State="AL")

我知道将所有具有State ='AL'的行分配给temp

所以我不是在逐个温度地逐个状态,而是在尝试学习如何开发一个循环,该循环可以检查状态的主题并从理论上动态地分配给临时物

temp1 <- filter(states, State="AL")
temp2 <- filter(states, State="CA")
....and so on

我只是想弄清楚如何遍历文件主题并动态分配它,然后将每个文件动态写入其自己的文件中。

write.csv(temp1, "AL.csv")

即使将我带到可以帮助我弄清楚它的地方,也是有益的。我现在只是被卡住了,我知道有可能,或者至少我认为是可以的。

2 个答案:

答案 0 :(得分:1)

我将使用基数R的split拆分您的数据,然后使用purrr::iwalk浏览并写入文件:

样本数据:

library(tidyverse)
states <- tibble(
  x = rnorm(1000),
  state = sample(state.abb, 1000, replace = TRUE)
)

分割并写入:

split_states <- split(states, states$state)
iwalk(split_states, ~write_csv(.x, paste0(.y, ".csv"))

注意iwalk等同于:

for (state in names(split_states)) {
  write_csv(split_states[[state]], paste0(state, ".csv")
}

即将发布的dplyr 0.8.0版本将具有group_walk,尽管我还没有尝试过,但它也可以在这里工作。

答案 1 :(得分:1)

据我所知,您不需要创建每个temp文件,只需知道要过滤的状态,然后编写csv文件

为此,既然您已经熟悉dplyr,则还应该安装readr软件包

的一部分

对于您的问题,首先必须具有唯一的状态

tidyverse

然后循环

# this will select the State column and get unique states
unique_states <- unique(states$State)