【问题标题】:In R, how to split a data into list of multiple subsets based on multiple categorical variables?在 R 中,如何根据多个分类变量将数据拆分为多个子集的列表?
【发布时间】:2017-09-03 07:34:18
【问题描述】:

在我的数据框中,我有很多逻辑变量,我想将数据框拆分为多个子集,条件是每个逻辑变量为 TRUE。例如,假设这是我的 df:

     V1    V2    V3 V4
1  TRUE  TRUE FALSE  2
2  TRUE FALSE  TRUE  5
3 FALSE  TRUE FALSE  4

所以我想要三个子集:

[1]
     V1    V2    V3 V4
1  TRUE  TRUE FALSE  2
2  TRUE FALSE  TRUE  5

[2]
     V1    V2    V3 V4
1  TRUE  TRUE FALSE  2
2 FALSE  TRUE FALSE  4

[3]
     V1    V2    V3 V4
1  TRUE FALSE  TRUE  5

感谢您的帮助!

【问题讨论】:

  • "假设这是我的 df" -- 不可能,因为 data.frame(V = c(T, T, F)) 不像 TT F 那样打印。请参阅 stackoverflow.com/questions/5963269/… 以获取有关编写易于复制的示例的代码的指导。

标签: r split subset


【解决方案1】:

一个简单的 lapply 循环就可以解决问题:

read.table(textConnection("V1 V2 V3 V4
T  T  F  2
T  F  T  5
F  T  F  4"), header=T) -> df

lapply(1:(ncol(df)-1), function(i) {
    subset(df, df[[i]])
})

[[1]]
    V1    V2    V3 V4
1 TRUE  TRUE FALSE  2
2 TRUE FALSE  TRUE  5

[[2]]
     V1   V2    V3 V4
1  TRUE TRUE FALSE  2
3 FALSE TRUE FALSE  4

[[3]]
    V1    V2   V3 V4
2 TRUE FALSE TRUE  5

【讨论】:

  • 或者干脆lapply(df[,-4], subset, x=df)
【解决方案2】:

你的问题很简单。对于您可以使用的第一个子集:

subset1 <- df[df[ ,1]==T, ]

函数取出第一列V1值为T的行。

当然,如果您想为该作业设置一个完整的功能以供以后使用,那么@thc 的解决方案是最好的。但如果您只需要快速快速地获得 3 个子集,请尝试上述方法。

我会让你弄清楚如何使用 subset2subset3 完成剩下的工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-23
    • 2014-12-02
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 2022-12-22
    • 2015-09-22
    • 2020-09-22
    相关资源
    最近更新 更多