R петля и фильтр - PullRequest
       5

R петля и фильтр

0 голосов
/ 21 февраля 2019

Так что я не знаю, как спросить об этом, мне тоже трудно гуглить, поэтому я подумал, что лучше спросить с реальным кодом.

Я новичок в R, яЯ пытаюсь научить себя, и до сих пор я изучаю основы, однако сейчас я столкнулся с ситуацией, когда я подумал, что циклическое прохождение будет лучшим вариантом, но я не знаю, с чего начать.

Правильносейчас я просто делаю случайные CSV-файлы со всеми состояниями в них, но для одной и той же записи, просто для удовольствия.

Я узнал с помощью библиотеки 'dplyr', которую я могу отфильтровать по теме

, следовательно:

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

, которую я знаю, назначает все строки, которые имеют State = 'AL'to temp

поэтому вместо того, чтобы переходить из состояния в состояние temp по температуре, я пытаюсь узнать, как разработать цикл, который может проверять тему состояния и назначать временные значения динамически, поэтому теоретически

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

Я просто пытаюсь выяснить, как я могу пройтись по теме файлов и динамически назначить ее, а затем динамически записывать каждую в свои файлы.

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

Было бы полезно даже привести меня туда, где это могло бы помочь мне понять это.Я просто застрял сейчас, и я знаю, что это возможно, или, по крайней мере, я так думаю.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Насколько я вижу, вам не нужно создавать каждый temp файл, вам просто нужно знать, какие состояния вы хотите отфильтровать, а затем записать файл CSV

Для этой цели,теперь, когда вы знакомы с dplyr, вам следует установить также readr, который входит в пакет tidyverse

. К вашему вопросу сначала вы должны иметь уникальные состояния, сначала

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

, а затем цикл

# here i will get the i-th character value in unique states
# for example in the first iteration i = 'AL' if thats at the top of unique states
library(readr)
for( i in unique_states){

  write_csv(filter(states , State = i ), path = paste0(i, '.csv'))
}

0 голосов
/ 21 февраля 2019

Я бы использовал базовые 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, который также должен работать здесь, хотя я 'мы еще не пробовали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...