r - 如何在R中从具有多个条件的一个数据帧创建多个数据帧

标签 r dataframe conditional-statements subset multiple-columns

我想根据x1x2中的多个条件从以下给定数据帧创建四个数据集

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=0x2=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唯一值以及相应的x1x2。最后,我想对y进行排序。所以我的最终数据集必须看起来像

   y  x1 x2

1 -3  0  0
2  3  0  0
3  8  0  0
4  9  0  0

我想为 mydata11mydata10mydata01 执行这项工作,其中 ,

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 循环或内置函数来创建这些数据集吗? 如有任何帮助,我们将不胜感激。

最佳答案

我们可以根据 x1x2 的唯一值分割数据,并在每个数据中获取唯一行按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/

相关文章:

r - 基于共享标识符将两个数据帧的值相乘

python - 如何在 python 中转换分组数据框

dataframe - 将 Julia 中的分组 DF 与 float 和字符串结合起来

r - 如何将 “flatten” 或 “collapse” 2D 数据帧转换为 R 中的 1D 数据帧?

python - python条件表达式中的疏散顺序

仅当 R (dplyr) 中满足特定条件时,才将一列中的某些数据替换为另一列数据

r - 带 dplyr 的条件 rowMeans

r dplyr sample_frac 在数据中使用种子

java - 为什么我不能用条件运算符替换 if 语句 (? :)?

conditional-statements - gnuplot,如何仅标记某些点?