【问题标题】:Name list of dataframes based on values in rows基于行中的值的数据框名称列表
【发布时间】:2019-06-20 23:49:33
【问题描述】:

我已经从这个数据框df创建了一个数据框列表

structure(list(ï..Name = structure(c(5L, 5L, 12L, 6L, 10L, 13L, 
7L, 1L, 4L, 2L, 9L, 8L, 3L, 11L), .Label = c("Alex", "Alice", 
"Greg", "Jay", "Jim", "Mick", "Mike", "Patrick", "Reese", "Sarah", 
"Simon", "Sue", "Timmy"), class = "factor"), Partner = structure(c(7L, 
9L, 7L, 11L, 10L, 2L, 1L, 1L, 4L, 8L, 5L, 6L, 3L, 3L), .Label = c("Alan", 
"Alex", "Britney", "Dalton", "Jeff", "Mary", "Peggy", "Percy", 
"Sue", "Susan", "Tara"), class = "factor"), Group1 = structure(c(1L, 
2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L), .Label = c("a", 
"b", "c", "d", "e", "f", "g"), class = "factor"), Group2 = structure(c(1L, 
2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L), .Label = c("Alpha", 
"Bravo ", "Charlie", "Delta", "Echo", "Foxtrot", "Gamma"), class = "factor")), class = "data.frame", row.names = c(NA, 
-14L))

使用此代码

list_df=df %>% 
  split(group_indices_(df, .dots =c("Group1","Group2"))) 

我首先尝试通过组合Group1 加上Group2 中的因子来命名每个数据框对象。然后我尝试对list_df 中的每个数据框进行子集化,使其在第 1 列中只有 Name 列,在第 2 列中只有 Partner

我已经能够通过这样做来对数据帧进行子集化

sub_toy=lapply(list_df, select,ï..Name, Partner)

我想不通的是如何在子集之前实际命名对象列表,以便我知道每个数据框属于哪个组组合

【问题讨论】:

    标签: r subset lapply


    【解决方案1】:

    您正在寻找以下任何一项

    split(df[1:2], df[3:4], TRUE)
    
    split(df[1:2], do.call(paste, df[3:4]))
    

    【讨论】:

    • 第二个答案看起来不错,但是有没有办法可以按列名进行选择?例如,代替df[1:2],我可以以某种方式索引df["ï..Name", "Partner"]吗?我知道代码实际上不起作用,但是有没有办法只用列名来做类似的事情
    • @M76 是的,您可以使用 c 组合名称,例如 split(df[c("ï..Name", "Partner")], do.call(paste, df[3:4])),它会返回相同的结果。
    • 有效!但是,你能解释一下代码在做什么吗?只是为了我自己的熏陶
    • @M76 do.call(paste,...) 只是将这些行粘贴到一个字符串中。并将其用作分裂因子
    【解决方案2】:

    这是我想出的一个快速解决方案。希望得到你正在寻找的东西:

    n <-  names(list_df)
    
    for(ii in 1:length(list_df)) {
        n[ii] = paste(as.character(unique(list_df[[ii]][[3]])),
        "_",
        as.character(unique(list_df[[ii]][[4]])), 
        sep = "")
    }
    
    names(list_df) <- n
    
    l <- lapply(list_df, function(x) {x[,-c(3,4)]}) #or your function call, too
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      • 2021-07-22
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多