如何在R中的几行中创建各种数据子集

时间:2017-12-13 18:37:04

标签: r

我想知道是否有办法创建各种数据子集而不必为每个子集使用子集函数。

说我有一个看起来像这样的df:

    female_ID   dispersal_distance  distance_bin
           A1                  230  500 m and below
           B1                  629  500 m - 1000 m
           C1                  888  500 m - 1000 m
           D1                 1236  1000 m - 1500 m
           E1                 1777  1500 m - 2000 m
           F1                 2314  2000 m - 2500 m
           G1                 2762  2500 m - 3000 m

现在我的很多代码都包含如下代码:

    df1 <- subset(df, distance_bin == '500 m and below')
    df2 <- subset(df, distance_bin == '500 m - 1000 m')
    df3 <- subset(df, distance_bin == '1000 m - 1500 m')
    df4 <- subset(df, distance_bin == '1500 m - 2000 m')        
    df5 <- subset(df, distance_bin == '2000 m - 2500 m')        
    df6 <- subset(df, distance_bin == '2500 m - 3000 m')

有没有办法在一行中做我上面做的事情?

由于

编辑:

根据@ A5C1D2H2I1M1N2O1R2T1和@Rui Barradas的建议,我有这个:

     df_list <- split(df, df$distance_bin)
     names(df_list) <- paste0("df", seq_along(df_list))
     list2env(df_list, envir = .GlobalEnv)

它给了我单独的df1,df2,df3等数据帧。虽然它不是一行代码,但这仍然有用,它减少了代码行数,所以谢谢!!

1 个答案:

答案 0 :(得分:0)

三衬垫

dd <- read.table(text = "female_ID   dispersal_distance  distance_bin
                            A1                  230  500_m_and_below
                            B1                  629  500_m_-_1000_m
                            C1                  888  500_m_-_1000_m
                            D1                 1236  1000_m_-_1500_m
                            E1                 1777  1500_m_-_2000_m
                            F1                 2314  2000_m_-_2500_m
                            G1                 2762  2500_m_-_3000_m", header = T,stringsAsFactor = F)



Fsplit <- function(x,y){ 
  ls <- split(x,y) 
  list2env(ls,envir = .GlobalEnv) 
} 

Fsplit(dd,dd$distance_bin) 

根据组名

在您的环境中创建新的数据框