【问题标题】:Split and drop grouping variable拆分和删除分组变量
【发布时间】:2018-03-26 16:06:49
【问题描述】:

我正在尝试将数据框拆分为列表。 This question 很有帮助,但我也想删除用于分组的列,因为它会弄乱以后的步骤。 splitdrop 参数仅适用于未使用的级别。数据框如下:

structure(list(Var1 = c(-1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L, 1L,
                         1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
                         1L, 1L, 1L, 1L, 1L, 1L, 1L, -1L, -1L, -1L, 
                         -1L, -1L, -1L, -1L, -1L), 
               Var2 = c(-1L, -1L, -1L, -1L, 0L, -1L, -1L, -1L, 0L, 
                        0L, 0L, -1L, -1L, -1L, -1L, -1L, -1L, -1L, 
                        -1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L,
                        -1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L),
               Var3 = c(1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L, 0L, 0L, 
                        0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 
                        1L, 1L, 1L, 1L, 1L, 1L, -1L, -1L, -1L, -1L, 
                        -1L, -1L, -1L, -1L), 
               Var4 = c(1L, -1L, -1L, 2L, -1L, -1L, -1L, 1L, 1L, 1L, 
                        1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
                        0L, 0L, 0L, 0L, 0L, 1L, -1L, -1L, -1L, -1L, 
                        -1L, -1L, -1L, -1L), 
               Var5 = c(1L, -1L, -1L, 2L, -1L, -1L, -1L, 2L, 1L, 1L, 
                        1L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 
                        0L, 0L, 1L, 1L, 1L, 1L, -1L, -1L, -1L, -1L, 
                        -1L, -1L, -1L, -1L), 
               Bin = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L, 5L, 6L, 6L, 
                       7L, 7L, 8L, 8L, 9L, 9L, 10L, 10L, 11L, 11L, 
                       12L, 12L, 13L, 13L, 14L, 14L, 15L, 15L, 16L, 
                       16L, 17L, 17L, 18L, 18L)), 
           .Names = c("Var1", "Var2", "Var3", "Var4", "Var5", "Bin"), 
            class = "data.frame", row.names = c(NA, -35L))

如何在删除“Bin”的同时按“Bin”拆分它?

【问题讨论】:

  • 如果你有兴趣使用一个包,有library(data.table); setDT(DF); split(DF, by="Bin", keep=FALSE)
  • 要记住的一个关键概念是您不能在字符值前面使用“-”(减号)。这仅适用于数字向量(可以使用grepwhich 构造),并且您只能使用“!”使用您使用grepl%in% 构造的逻辑向量。

标签: r dataframe indexing negation


【解决方案1】:

根据您对本栏的信息,您可以使用

split(df[, -ncol(df)], df$Bin)

如果你知道这是最后一个,并且

split(df[, !names(df) == "Bin"], df$Bin)

如果你只知道它的名字。还有

split(df[, -which(names(df) == "Bin")], df$Bin)

split(df[, -match("Bin", names(df))], df$Bin)

【讨论】:

  • 还有!grepl("Bin", names(df) )-grep("Bin", names(df)
猜你喜欢
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
  • 2011-10-02
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多