【问题标题】:Segregating dataset and name each new dataset as per unique column names分离数据集并根据唯一的列名命名每个新数据集
【发布时间】:2016-09-28 10:43:17
【问题描述】:

我有一个数据集(nm),如下所示:

nm

2_V2O   10_Kutti    14_DD   15_TT   16_DD   19_V2O  20_Kutti
  0        1          1       0       0       1        0
  1        1          1       1       1       0        0
  0        1          0       1       0       0        1
  0        1          1       0       1       0        0

现在我想要多个新数据集,这些数据集根据其唯一的列名进行隔离。所有数据集名称也必须按照其列名创建,如下所示:

Kutti   
10_Kutti    20_Kutti
   1          0
   1          0
   1          1
   1          0

V2O 
2_V2O   19_V2O
  0       1
  1       0
  0       0
  0       0

DD  
14_DD   16_DD
  1       0
  1       1
  0       0
  1       1

TT  
16_TT   
0   
1   
0   
1   

我知道这可以使用 dplyr 中的“选择”功能来完成,但我需要一个动态程序来自动为任何数据集构建它。

【问题讨论】:

标签: r


【解决方案1】:

我们可以通过'nm'列名的子字符串split。删除列名的前缀直到 _sub 并将其用于 split 'nm'。

lst <- split.default(nm, sub(".*_", "", names(nm)))
lst
#$DD
#  14_DD 16_DD
#1     1     0
#2     1     1
#3     0     0
#4     1     1

#$Kutti
#  10_Kutti 20_Kutti
#1        1        0
#2        1        0
#3        1        1
#4        1        0

#$TT
#  15_TT
#1     0
#2     1
#3     1
#4     0

#$V2O
#  2_V2O 19_V2O
#1     0      1
#2     1      0
#3     0      0
#4     0      0

最好将data.frames 保存在list 中。如果我们坚持它应该是全局环境中的单个data.frame对象(不推荐),使用list2env

list2env(lst, envir = .GlobalEnv)

现在,打电话

DD

数据

nm <- structure(list(`2_V2O` = c(0L, 1L, 0L, 0L), `10_Kutti` = c(1L, 
1L, 1L, 1L), `14_DD` = c(1L, 1L, 0L, 1L), `15_TT` = c(0L, 1L, 
1L, 0L), `16_DD` = c(0L, 1L, 0L, 1L), `19_V2O` = c(1L, 0L, 0L, 
0L), `20_Kutti` = c(0L, 0L, 1L, 0L)), .Names = c("2_V2O", "10_Kutti", 
"14_DD", "15_TT", "16_DD", "19_V2O", "20_Kutti"), class = "data.frame",
row.names = c(NA, -4L))

【讨论】:

  • 有趣..您没有使用split(它将调用split.data.frame),而是显式调用split.default,它将data.frame视为列表(?)。我在任何地方都没有看到这个记录。你从哪里得到的?
  • @DavidArenburg 我认为即使我们执行split,它仍然会根据警告Warning message: In split.default(x = seq_len(nrow(x)), f = f, drop = drop, ...) : data length is not a multiple of split variable 调用split.default。还有,split.data.frame,实际上是拆分行,但是这里我们要拆分列
  • @akrun 但我不想列出不同的数据框
  • @Gin_Salmon 一个原因是大部分操作都可以在list 内完成。使用单个 data.frame,如果您想执行这些操作,我们可能需要再次循环它。另外,写文件也需要循环。取而代之的是,为什么不保留list
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 2015-01-15
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
相关资源
最近更新 更多