创建包含它们的 table 单个对象

Create single objects form a table containing them

这是我的 R 问题:

我有一个 table 类似于:

TABLE_NAME          COLUM_NAME          DATA_TYPE 
table_1               DATA              DATE
table_1               NAME              VARCHAR2
table_1               SURNAME           VARCHAR2
table_2               DATA              DATE
table_2               PACK              NUMBER

我想做的是根据 TABLE_NAME 值创建 2 个不同的 table,名称为 TABLE_NAME。 像这样

table_1

COLUM_NAME          DATA_TYPE 
   DATA              DATE
   NAME              VARCHAR2
   SURNAME           VARCHAR2

table_2

COLUM_NAME          DATA_TYPE
DATA              DATE
PACK              NUMBER

这样我就可以创建我的 table 的目录、数据库的同义词和视图(使用 ROracle 无法从连接中获取此类元数据)。

我怎样才能做到这一点?

我们可以使用 split 创建 listdata.frames

lst1 <- split(df1[-1], df1[[1]])
lst1
#$table_1
#  COLUM_NAME DATA_TYPE
#1       DATA      DATE
#2       NAME  VARCHAR2
#3    SURNAME  VARCHAR2

#$table_2
#  COLUM_NAME DATA_TYPE
#4       DATA      DATE
#5       PACK    NUMBER

此处,split 根据提供的系数(f in split)拆分 data.frame。它在 'TABLE_NAME' 中查找具有相同元素的行并将它们组合在一起,并且 return 那些相似行的 list

tidyverse 你可以 filter 他们使用 select:

删除第一列
table1 <- df %>%
  filter(TABLE_NAME == "table_1") %>% 
  select(-TABLE_NAME)

table2 <- df %>%
  filter(TABLE_NAME == "table_2") %>% 
  select(-TABLE_NAME)

您还可以放置一个函数来处理大量数据帧:

table_fun <- function(x) {
  df %>%
    filter(TABLE_NAME == x) %>%
    select(-TABLE_NAME)
}

table_2 <- table_fun("table_2")

# A tibble: 2 x 2
  COLUM_NAME DATA_TYPE
  <chr>      <chr>    
1 DATA       DATE     
2 PACK       NUMBER 

使用dplyr你也可以尝试:

df %>%
 group_split(TABLE_NAME)

[[1]]
# A tibble: 3 x 3
  TABLE_NAME COLUM_NAME DATA_TYPE
  <chr>      <chr>      <chr>    
1 table_1    DATA       DATE     
2 table_1    NAME       VARCHAR2 
3 table_1    SURNAME    VARCHAR2 

[[2]]
# A tibble: 2 x 3
  TABLE_NAME COLUM_NAME DATA_TYPE
  <chr>      <chr>      <chr>    
1 table_2    DATA       DATE     
2 table_2    PACK       NUMBER