Więc nie dlatego, że pyta o to, mam trudności z Googling, więc pomyślałem z pytaniem o aktualny kod byłby lepszy.

Jestem nowością r, staram się uczyć siebie i do tej pory podnoszę podstawy, jednak natknąłem się na sytuację teraz, gdzie pomyślałem zapętląc się, byłoby lepszą opcją, ale nie mam pojęcia, gdzie zacząć .

W tej chwili po prostu robię losowe pliki CSV ze wszystkimi stanami w nich, ale wiele tego samego wpisu tylko dla zabawy.

Dowiedziałem się z biblioteki "DPLYR", którą mogę przefiltrować według tematu

W związku z tym:

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

Co wiem, przypisuje wszystkie wiersze, które mają stan = "al" do temp

Więc zamiast postępować zgodnie z Państwem Tempem przez Temp, staram się dowiedzieć się, jak mogę rozwinąć pętlę, która może sprawdzić temat stanu i przypisać do Tempesa dynamicznie taksytycznie

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

Próbuję po prostu dowiedzieć się, jak mogę pętli za pomocą tematu plików i przypisać go dynamicznie, a następnie pisz każdy z nich dynamicznie do własnych plików.

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

Nawet prowadzenie mnie do niektórych, gdzie to może pomóc mi zrozumieć, byłoby korzystne. Trzymam się teraz i wiem, że to możliwe, a przynajmniej myślę, że robię.

2
McMintz 21 luty 2019, 03:45

2 odpowiedzi

Najlepsza odpowiedź

O ile widzę, nie musisz tworzyć pliku temp, wystarczy wiedzieć, które stany, które chcesz filtrować, a następnie pisząc plik CSV

W tym celu, teraz, gdy znasz dplyr Należy również zainstalować readr, który jest częścią pakietu tidyverse

Do twojego pytania musisz najpierw mieć wyjątkowe stany, najpierw

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

A następnie pętla

# 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'))
}

1
Dioney Blanco 21 luty 2019, 01:03

Używałbym Base R's split, aby podzielić swoje dane, a następnie {X1}}, aby przejrzeć i napisać pliki:

Przykładowe dane:

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

Split i pisz:

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

Uwaga iwalk Jest to odpowiednik:

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

Nadchodzące wydanie 0.8.0 DPLER będzie miało group_walk, co powinno pracować tutaj, choć jeszcze nie próbowałem.

1
Nick Kennedy 21 luty 2019, 12:13