假设我有一个包含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
.
.
.
答案 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)
您将获得一个由数据帧组成的列表,这些数据帧具有唯一的a
,b
答案 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))