【问题标题】:How to create multiple data frame from one data frame with multiple condition in R如何从R中具有多个条件的一个数据帧创建多个数据帧
【发布时间】:2020-07-01 04:27:18
【问题描述】:

我想通过x1和x2中的多个条件从以下给定数据框创建four数据集

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 的unique 值以及对应的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 循环或内置函数来创建这些数据集吗? 任何帮助表示赞赏。

【问题讨论】:

    标签: r dataframe conditional-statements subset multiple-columns


    【解决方案1】:

    我们可以根据x1和x2的唯一值来split数据,并在按y排序后得到每个列表中的unique行。

    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)
    

    【讨论】:

    • 它没有给出排序后的版本。我需要对 y 值进行排序。
    • 更新了答案以按y 值排序。
    猜你喜欢
    • 2022-08-12
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多