Попытка создать серию кадров данных из уровней факторного столбца с помощью функции цикла - PullRequest
0 голосов
/ 28 марта 2019

Мой набор данных состоит из образовательных данных для каждого штата по годам.Я хотел бы сделать цикл, который создает кадры данных для каждого состояния, который содержит все столбцы в исходном наборе данных.Примером одного первичного ключа является 1992_ALABAMA.Я хотел бы иметь фрейм данных для Алабамы, который объединяет все годы, и повторять это для каждого штата без необходимости создавать каждый фрейм данных вручную.

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

# this is how I did this manually for Alabama:
alabama <- data[which(data$STATE == "ALABAMA"),]


# this is the loop I am trying to use. stLevels is a character vector     
# containing all of the levels of the state factor column.
for (i in stLevels) {
  i <- data[which(data$STATE == i),]
}

Я надеюсь на 80 фреймов данных, названных по их соответствующему состоянию, которое содержит все наблюдения указанного состояния.В результате создается фрейм данных с именем «i», который содержит все строки, содержащие Вайоминг.Оно не было названо правильно, и этого не произошло ни с одним из других штатов.

1 Ответ

0 голосов
/ 28 марта 2019

Я бы сделал это так:

state_dataframes = lapply(stLevels, function(x){data[data$STATE == x,]})
names(state_dataframes) = stLevels

Это создаст список, содержащий все необходимые вам подмножества. Вы можете получить к ним доступ, позвонив по номеру state_dataframes[['ALABAMA']]. Если вы действительно хотите сделать это по-своему, вы можете сделать это:

for(i in stLevels){
  assign(x = gsub(x = deparse(i), pattern = '\\"', replacement = ''), 
         value = data[which(data$STATE == i),],
         envir = globalenv())
}

assign связывает имя с объектом
gsub удаляет кавычки из имени
deparse получает значение i в каждой итерации

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