根据R中的值进行动态子集划分

根据R中的值进行动态子集划分,r,dynamic,subset,R,Dynamic,Subset,我有一个具有下一个结构的数据帧 Id Flag value1 value2 123 1 10 3.4 124 1 5 1.2 125 0 19 8.4 126 1 8 1.2 127 0 17 6.5 128 2 1 -6.5 我

我有一个具有下一个结构的数据帧

    Id    Flag    value1   value2
    123    1       10        3.4
    124    1        5        1.2
    125    0       19        8.4
    126    1        8        1.2
    127    0       17        6.5
    128    2        1       -6.5
我需要仅根据列的名称将数据帧分为“n”个子集,其中“n”是列的不同值,我希望如下所示:

    dataframe1
    Id    Flag    value1   value2
    123    1       10        3.4
    124    1        5        1.2
    126    1        8        1.2

    dataframe2
    Id    Flag    value1   value2
    125    0       19        8.4
    127    0       17        6.5

    dataframe3
    Id    Flag    value1   value2
    128    2        1       -6.5
因为这是在函数内部进行的,所以我只知道列的名称和它可以接受的不同值,我尝试了:

    dataFrame$column==value
但是我需要对每个值都这样做,并且这些值的长度是动态的,这取决于列的名称

提前谢谢这里,斯普利特是你的朋友

splitbycol <- function(df, colname) {
   split(df, df[[colname]])
}

splitbycol(df, "Flag")
## $`0`
##    Id Flag value1 value2
## 3 125    0     19    8.4
## 5 127    0     17    6.5
## 
## $`1`
##    Id Flag value1 value2
## 1 123    1     10    3.4
## 2 124    1      5    1.2
## 4 126    1      8    1.2
## 
## $`2`
##    Id Flag value1 value2
## 6 128    2      1   -6.5
然后,如果您想使每个数据帧成为一个单独的变量,请调用

subdf <- splitbycol(df, "Flag")
for (i in seq_along(subdf))
   assign(paste0("df", i), subdf[[i]])
df1
##    Id Flag value1 value2
## 3 125    0     19    8.4
## 5 127    0     17    6.5
这里,斯普利特是你的朋友

splitbycol <- function(df, colname) {
   split(df, df[[colname]])
}

splitbycol(df, "Flag")
## $`0`
##    Id Flag value1 value2
## 3 125    0     19    8.4
## 5 127    0     17    6.5
## 
## $`1`
##    Id Flag value1 value2
## 1 123    1     10    3.4
## 2 124    1      5    1.2
## 4 126    1      8    1.2
## 
## $`2`
##    Id Flag value1 value2
## 6 128    2      1   -6.5
然后,如果您想使每个数据帧成为一个单独的变量,请调用

subdf <- splitbycol(df, "Flag")
for (i in seq_along(subdf))
   assign(paste0("df", i), subdf[[i]])
df1
##    Id Flag value1 value2
## 3 125    0     19    8.4
## 5 127    0     17    6.5
另一种避免循环的方法

另一种避免循环的方法


另外,值得一提的是,最好将data.frame保存在一个列表中,而不是作为全局名称空间中的独立变量。谢谢你的建议,你是说我应该有一个dataFrameList,其中每个条目都是一个数据框?还有,值得一提的是,最好将数据保存在一个列表中,而不是在全局命名空间中作为一个单独的变量。谢谢你的建议,所以你是说我应该有一个dataFrameList,其中每个条目都是一个数据框?非常感谢,这完全解决了问题!非常感谢,这完全解决了问题!