繁体   English   中英

按两个因素拆分数据框

[英]Split data frame by two factors

我有一个数据框( sampdata ),看起来像这样:

A B  C   D
1 X  5 0.3
2 Y 10 0.9
3 Y  7 0.2
4 Y  5 0.4
5 X 10 0.7

基本上,我想基于 B 列和 C 列创建两个新数据框。在之前的帖子中,我已经看到如何根据我所做的一个因素使用“拆分”对数据进行子集化

test <- split(sampdata, sampdata$B)
str(test)

到目前为止一切顺利。 但是,当我尝试添加第二个拆分时:

testBC <- split(test, test$C)

我收到一条错误消息:

split.default(test, test$Product) 中的错误:组长度为 0 但数据长度 > 0

我也试过:

testBC <- split(test$B, test$C)

但收到另一条错误消息。 所以,然后我尝试了第二种方法,基于ddplyplyr包:

test2 <- ddply(sampdata, c("B", "C"))

这确实按行组织数据,以便:

A B  C   D
1 X  5 0.3
5 X 10 0.7 
2 Y 10 0.9
3 Y  7 0.2
4 Y  5 0.4

但是,其他线程仅显示如何基于一个列( test2$B )而不是两者来访问特定数据帧。 我宁愿简单地基于 B 和 C 的子集生成一个新的数据框,这样:

newdf1
A B C   D
1 X 5  .3
5 X 10 .9

newdf2
A B C   D
2 Y 7  .2
3 Y 5  .4
4 Y 10  .7

在尝试了几种方法之后,可能是直接/简单的任务出奇地困难(至少对我而言)。

任何帮助最受赞赏。

如果我们需要按多列拆分,请将其放在list

split(df1, list(df1$B, df1$C), drop = TRUE)
#$X.5
#  A B C   D
#1 1 X 5 0.3

#$Y.5
#  A B C   D
#4 4 Y 5 0.4

#$Y.7
#  A B C   D
#3 3 Y 7 0.2

#$X.10
#  A B  C   D
#5 5 X 10 0.7

#$Y.10
#  A B  C   D
#2 2 Y 10 0.9

我尝试了其他建议,但无法使用我的“真实”数据。

这是我所做的

test10<-sampdata
test10$C<-10
test10$B<-"X"
test.10.X<-test10

这给了我一个单一的数据框,它只有与基于列 B 和 C 的 X 和 10 相关联的值。然后我将不得不为列 B 和 C 重复 X、Y 和 10、5、7 的每个组合。

我不擅长编写 for 循环,但也许我可以编写某种循环,这样我就不会复制和粘贴相同的代码而只是更改值?

无论如何,这对我的目的有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM