создать много подмножеств одновременно - PullRequest
0 голосов
/ 24 апреля 2018

У меня большой набор данных, основанный на некоторых медицинских записях, поэтому я не могу опубликовать образец из-за ограничений конфиденциальности, но я пытаюсь разделить один фрейм данных на несколько. Цель состоит в том, чтобы каждый уникальный объект был отдельным фреймом данных, чтобы я мог определить показатели эффективности для каждого объекта. Я пробовал следующий код, где df - это имя фрейма данных, Name - это имя, которое я дам подмножеству, Location - значение, представляющее интерес для переменной «Facility» из исходного фрейма данных:

ratefunct <- function(df, Name, Facility) {Name <- subset(df, Facility, == "Location")
Name <- within(Name, {rate <- <-cumsum(Complete)/ cumsum(Complete+Incomplete) })}

но, похоже, ничего не получается в моей среде

1 Ответ

0 голосов
/ 24 апреля 2018

Судя по вашему комментарию, вы пытаетесь сохранить результаты split в виде отдельных фреймов данных.

Вы можете сделать это, используя assign

dfL <- split(iris, iris$Species)

for (i in 1:length(dfL)){
  assign(paste0("df_", names(dfL[i])), dfL[i])

# added the print line so you can see the names of the objects that are created

  print(paste0("df_",names(dfL[i])))

}

[1] "df_setosa"
[1] "df_versicolor"
[1] "df_virginica"

, который создаст фреймы данных df_setosa, df_virginica и df_versicolor


В качестве альтернативы, если вы довольны текущими именами объектов, вы можете просто использовать:

list2env(dfL,envir=.GlobalEnv)

, который сохранит каждый элемент списка как объект, используя имя объекта в списке.Таким образом, вместо префикса df_ вы бы просто имели объекты setosa, virginica и versicolor.


Редактировать: в качестве более простого способаприсвойте индивидуальные имена каждому созданному объекту, непосредственно указав names из dfL - это хорошее чистое решение:

names(dfL) <- paste0("df_",names(dfL))
list2env(dfL,envir=.GlobalEnv)

Таким образом, вам не нужно писать цикл for и по-прежнему получать объектимена с полезным префиксом.

...