这是我的问题:
我有一个与此类似的表:
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作为名称的table_name值创建2个不同的表。像这样
table_1
COLUM_NAME DATA_TYPE
DATA DATE
NAME VARCHAR2
SURNAME VARCHAR2
table_2
COLUM_NAME DATA_TYPE
DATA DATE
PACK NUMBER
这样,我可以创建表格的目录,同义词和DB的视图(不可能从连接中获取此类元数据)。
我该如何实现?
我们可以使用split
创建data.frame
的list
S
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
基于提供的因子(split
中的f
)将data.frame分开。它寻找在" table_name"中具有相同元素的行,并将它们分组在一起,然后返回这些类似行的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