我想根据x1
和x2
中的多个条件从以下给定数据帧创建四个
数据集
mydata=structure(list(y = c(-3, 24, 4, 5, 3, -3, -3, 24, 5, 4, 8, 7,
9, 2, 4, 8, 7, 3, 8, 12, 9, 10, 12, 11, 2),
x1 = c(0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1,
0, 1, 0, 1, 1, 0, 0, 1, 1, 1
),
x2 = c(1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0,
0, 1, 0, 0, 1, 1, 1, 0)), class = "data.frame",
row.names = c(NA,25L))
第一个数据集是 mydata00
,它是根据这些条件 x1=0
和 x2=0
构建的,
mydata00=filter(mydata, c(mydata$x1==0 & mydata$x2==0))
> mydata00
y x1 x2
1 -3 0 0
2 -3 0 0
3 8 0 0
4 3 0 0
5 9 0 0
现在,我只需要 y
的唯一
值以及相应的x1
和x2
。最后,我想对y
进行排序。所以我的最终数据集必须看起来像
y x1 x2
1 -3 0 0
2 3 0 0
3 8 0 0
4 9 0 0
我想为 mydata11
、mydata10
、mydata01
执行这项工作,其中 ,
mydata11=filter(mydata, c(mydata$x1==1 & mydata$x2==1))
mydata10=filter(mydata, c(mydata$x1==1 & mydata$x2==0))
mydata01=filter(mydata, c(mydata$x1==0 & mydata$x2==1))
我可以使用任何 for 循环或内置函数来创建这些数据集吗? 如有任何帮助,我们将不胜感激。
最佳答案
我们可以根据 x1
和 x2
的唯一值分割
数据,并在每个数据中获取唯一
行按y
排序后列出。
temp <- lapply(split(mydata, list(mydata$x1, mydata$x2)), function(x)
unique(x[order(x$y), ]))
temp
#$`0.0`
# y x1 x2
#6 -3 0 0
#18 3 0 0
#16 8 0 0
#21 9 0 0
#$`1.0`
# y x1 x2
#14 2 1 0
#5 3 1 0
#10 4 1 0
#4 5 1 0
#...
如果我们需要将数据作为单独的数据框,我们可以适本地命名它们并使用list2env
。
names(temp) <- paste0("mydata", names(temp))
list2env(temp, .GlobalEnv)
tidyverse
这样做的方法是:
library(tidyverse)
mydata %>% group_split(x1, x2) %>% map(~.x %>% arrange(y) %>% distinct)
关于r - 如何在R中从具有多个条件的一个数据帧创建多个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60767300/