gpt4 book ai didi

r - 按列名索引拆分数据框

转载 作者:行者123 更新时间:2023-12-04 18:06:12 24 4
gpt4 key购买 nike

这是先前问题的变体。

df <- data.frame(matrix(rnorm(9*9), ncol=9))
names(df) <- c("c_1", "d_1", "e_1", "a_p", "b_p", "c_p", "1_o1", "2_o1", "3_o1")

我想通过下划线“_”后 column.names 中给出的索引拆分数据框。 (索引可以是不同长度的任何字符/数字;这些只是随机示例)。
indx <- gsub(".*_", "", names(df))

并相应地命名结果数据帧最后我想得到三个数据帧,称为:
  • df_1
  • df_p
  • df_o1

  • 谢谢!

    最佳答案

    在这里,您可以通过 indx 拆分列名, 使用 lapply 获取列表中的数据子集和 [ , 使用 setNames 设置列表元素的名称,并使用 list2env如果您需要将它们作为单独的数据集(不推荐,因为大多数操作可以在列表中完成,如果您愿意,可以稍后使用 write.tablelapply 保存。

     list2env(
    setNames(
    lapply(split(colnames(df), indx), function(x) df[x]),
    paste('df', sort(unique(indx)), sep="_")),
    envir=.GlobalEnv)


    head(df_1,2)
    # c_1 d_1 e_1
    #1 1.0085829 -0.7219199 0.3502958
    #2 -0.9069805 -0.7043354 -1.1974415


    head(df_o1,2)
    # 1_o1 2_o1 3_o1
    #1 0.7924930 0.434396 1.7388130
    #2 0.9202404 -2.079311 -0.6567794

    head(df_p,2)
    # a_p b_p c_p
    #1 -0.12392272 -1.183582 0.8176486
    #2 0.06330595 -0.659597 -0.6350215

    或使用 Map .这类似于上述方法即。按 indx 拆分列名并使用 [提取列,其余同上。
    list2env(setNames(Map(`[` , 
    list(df), split(colnames(df), indx)),
    paste('df',unique(sort(indx)), sep="_")), envir=.GlobalEnv)

    更新

    你可以做:
     indx1 <- factor(indx, levels=unique(indx))
    split(colnames(df), indx1)

    关于r - 按列名索引拆分数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27501615/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com