这是我的R问题:
我有一个与此类似的表:
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个不同的表。 像这样
表_1
COLUM_NAME DATA_TYPE
DATA DATE
NAME VARCHAR2
SURNAME VARCHAR2
table_2
COLUM_NAME DATA_TYPE
DATA DATE
PACK NUMBER
通过这种方式,我可以创建表的目录,同义词和数据库视图(使用ROracle无法从连接中获取此类元数据)。
我该如何实现?
答案 0 :(得分:3)
我们可以使用split
创建list
个data.frame
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
中的split
)分割data.frame。它会在“ TABLE_NAME”中查找具有相同元素的行,并将它们分组在一起,并返回其中的list
相似行
答案 1 :(得分:1)
从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
答案 2 :(得分:1)
With dplyr
you can also try:
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