使用循环从单个数据集创建多个数据框

时间:2017-07-07 00:00:35

标签: r

快速提问。我有以下内容:

a <- c(1,5,2,3,4,5,3,2,1,3)
b <- c("a","a","f","d","f","c","a","r","a","c")
c <- c(.2,.6,.4,.545,.98,.312,.112,.4,.9,.5)
df <- data.frame(a,b,c)

我要做的是利用for循环根据列B的列内容从行创建多个数据帧(即“a”,“d”等的df等)。

同时,我还想根据B列中的相应值命名数据框(对于从“a”创建的数据框,df将命名为“a”。

我尝试根据这里提供的答案Using a loop to create multiple data frames in R使其工作,但我没有运气。

如果有帮助,我会使用levels()和nlevels()创建的变量在循环中使用,以根据数据的变化保持可伸缩性。任何帮助将非常感激。

谢谢!

1 个答案:

答案 0 :(得分:2)

这应该做:

require(dplyr)

df$b <- as.character(df$b)

col.filters <- unique(df$b) 

lapply(seq_along(col.filters), function(x) {
  filter(df, b == col.filters[x])
  }
  ) -> list

names(list) <- col.filters

list2env(list, .GlobalEnv)

当然,您不需要dplyr来执行此操作。您可以使用基本语法:

df$b <- as.character(df$b)

col.filters <- unique(df$b) 

lapply(seq_along(col.filters), function(x) {
  df[df[, "b"] == col.filters[x], ]
  }
  ) -> list

names(list) <- col.filters

list2env(list, .GlobalEnv)

但我发现dplyr更加直观。

干杯