使用for循环从一个基于off的值创建多个数据帧

wra*_*ond 3 for-loop r dataframe

我有一个大数据帧,我想使用for循环转换为更小的子集数据帧.我希望新数据框基于大/父数据框中的列中的值.这是一个例子

x<- 1:20
y <- c("A","A","A","A","A","A","A","A","B","B","B","B","B","B","B","B","B","C","C","C")
df <- as.data.frame(cbind(x,y))
Run Code Online (Sandbox Code Playgroud)

好吧,现在我想要三个数据帧,一个是x和y列,但只有y =="A",第二个是y =="B"等等.所以最终结果将是3个新的数据帧df. A,df.B和df.C. 我意识到这很容易做出一个for循环但我的实际数据有很多级别的y所以使用for循环(或类似)会很好.

谢谢!

Pie*_*nte 7

如果要在循环中创建单独的对象,可以使用assign.我用过,unique因为你说你有很多级别.

 for(i in unique(df$y)) {
        nam <- paste("df", i, sep = ".")
        assign(nam, df[df$y==i,])
        }

> df.A
  x y
1 1 A
2 2 A
3 3 A
4 4 A
5 5 A
6 6 A
7 7 A
8 8 A
> df.B
    x y
9   9 B
10 10 B
11 11 B
12 12 B
13 13 B
14 14 B
Run Code Online (Sandbox Code Playgroud)


Sab*_*DeM 5

我认为你只需要这个split功能:

 split(df, df$y)
$A
  x y
1 1 A
2 2 A
3 3 A
4 4 A
5 5 A
6 6 A
7 7 A
8 8 A

$B
    x y
9   9 B
10 10 B
11 11 B
12 12 B
13 13 B
14 14 B
15 15 B
16 16 B
17 17 B

$C
    x y
18 18 C
19 19 C
20 20 C
Run Code Online (Sandbox Code Playgroud)

这只是正确地对输出进行子集化以分割结果并将结果存储到诸如此类的对象的dfA <- split(df, df$y)[[1]]问题dfB <- split(df, df$y)[[2]]