使用循环根据列条件在R中创建多个数据框

时间:2018-10-16 15:27:28

标签: r

假设我有一个包含3列的数据框。我想为几列的唯一组合中的每个创建单独的子数据框。

例如,假设我们只有3列,

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)

我想为列'a'和'b'的每个唯一组合获取一个单独的数据框

我首先使用unique来获取如下所示的唯一组合的列表,

factors <- unique(df[,c('a','b')])
   a b
1  1 a
2  5 a
3  2 f
4  3 d
5  4 f
6  5 c
7  3 a
8  2 r
10 3 c

但是我不确定下一步该怎么做。

以下代码仅用于说明目的。理想情况下,这将通过循环来完成,在循环中,它使用factors中的每一行来创建数据帧。

df_1_a <- df %>% filter(a==1, b=='a')
  a b   c
1 1 a 0.2
2 1 a 0.9

df_3_a <- %>% filter(a==3, b=='a')
  a b     c
1 3 a 0.112

.
.
.

2 个答案:

答案 0 :(得分:0)

这有点脏,我不确定是否可以回答您的问题,但是请尝试以下操作:

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)
d <- paste0(a,b)
df <- data.frame(a,b,c,d)
df_splited <- split(df,df$d)

您将获得一个由数据帧组成的列表,这些数据帧具有唯一的ab

组合

答案 1 :(得分:0)

获得唯一的组合后,您可以使用split。

 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,stringsAsFactors = FALSE)
    fx <- unique(df[,c('a','b')])
    fx_list <- split(fx,rownames(fx))