English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Uso do merge de data frames em R merge() função.
A sintaxe da função merge() é a seguinte:
# S3 Método merge(x, y, …) # data.frame do S3 Método merge(x, y, by = intersect(names(x), names(y)), by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all, sort = TRUE, suffixes = c(".x",".y"), no.dups = TRUE, incomparables = NULL, …)
Descrição dos parâmetros comuns:
x, y: data frames
by, by.x, by.y: especifica o nome da coluna de correspondência em dois data frames, pelo padrão usa o nome da coluna da mesma em ambos os data frames.
all: valor lógico; all = L é a abreviação de all.x = L e all.y = L, L pode ser TRUE ou FALSE.
all.x: valor lógico, o padrão é FALSE. Se TRUE, mostra as linhas correspondentes em x, mesmo que não haja correspondência correspondente em y, as linhas não correspondentes em y são representadas por NA.
all.y: valor lógico, o padrão é FALSE. Se TRUE, mostra as linhas correspondentes em y, mesmo que não haja correspondência correspondente em x, as linhas não correspondentes em x são representadas por NA.
sort: valor lógico, indica se a coluna deve ser ordenada.
A função merge() é muito semelhante à função JOIN do SQL:
Natural join ou INNER JOIN: Se houver pelo menos uma correspondência na tabela, retorna as linhas
Left outer join ou LEFT JOIN: Mesmo que não haja correspondência na tabela direita, retorna todas as linhas da tabela esquerda
Right outer join ou RIGHT JOIN: Mesmo que não haja correspondência na tabela esquerda, retorna todas as linhas da tabela direita
Full outer join ou FULL JOINSe houver correspondência em qualquer uma das tabelas, retorna as linhas
# data frame 1 df1 = data.frame(SiteId = c(1:6), Site = c("Google","w3codebox","Taobao","Facebook","Zhihu","Weibo")) # data frame 2 df2 = data.frame(SiteId = c(2, 4, 6, 7, 8), Country = c("CN","USA","CN","USA","IN") # INNER JOIN df1 = merge(x=df1,y=df2,by="SiteId") print("----- INNER JOIN -----) print(df1) # FULL JOIN df2 = merge(x=df1,y=df2,by="SiteId",all=TRUE) print("----- FULL JOIN -----) print(df2) # LEFT JOIN df3 = merge(x=df1,y=df2,by="SiteId",all.x=TRUE) print("----- LEFT JOIN -----) print(df3) # RIGHT JOIN df4 = merge(x=df1,y=df2,by="SiteId",all.y=TRUE) print("----- RIGHT JOIN -----) print(df4)
O resultado da execução do código acima é:
[1] "----- INNER JOIN -----" SiteId Site Country 1 2 w3codebox CN 2 4 Facebook USA 3 6 Weibo CN [1] "----- FULL JOIN -----" SiteId Site Country.x Country.y 1 2 w3codebox CN CN 2 4 Facebook USA USA 3 6 Weibo CN CN 4 7 <NA> <NA> <NA> USA 5 8 <NA> <NA> <NA> IN [1] "----- LEFT JOIN -----" SiteId Site.x Country Site.y Country.x Country.y 1 2 w3codebox CN w3codebox CN CN 2 4 Facebook USA Facebook USA USA 3 6 Weibo CN Weibo CN CN [1] "----- RIGHT JOIN -----" SiteId Site.x Country Site.y Country.x Country.y 1 2 w3codebox CN w3codebox CN CN 2 4 Facebook USA Facebook USA USA 3 6 Weibo CN Weibo CN CN 4 7 <NA> <NA> <NA> <NA> <NA> USA 5 8 <NA> <NA> <NA> <NA> <NA> <NA> IN
usado no R melt() e cast() funções para integrar e dividir dados.
melt() : transforma dados em formato largo para formato longo.
cast() : transforma dados em formato longo para formato largo.
A figura a seguir ilustra bem as funções melt() e cast() (exemplos detalhados virão mais tarde):
melt() empilha cada coluna do conjunto de dados em uma coluna, a sintaxe da função é:
melt() empilha cada coluna do conjunto de dados em uma coluna, a sintaxe da função é:
Descrição dos parâmetros:
melt(data, ..., na.rm = FALSE, value.name = "value")
data: conjunto de dados.
...: Parâmetros passados para outros métodos ou parâmetros recebidos de outros métodos.
na.rm: remover valores NA do conjunto de dados.
value.name: nome da variável, usado para armazenar valores.
# Instale as bibliotecas necessárias antes de realizar as seguintes operações install.packages("MASS", repos = "https://mirrors.ustc.edu.cn/CRAN/) # melt() e cast() precisam de bibliotecas install.packages("reshape2", repos = "https://mirrors.ustc.edu.cn/CRAN/) install.packages("reshape", repos = "https://mirrors.ustc.edu.cn/CRAN/)
Exemplo de teste:
# Carregar bibliotecas library(MASS) library(reshape2) library(reshape) # Criar data frame id<- c(1, 1, 2, 2) time <- c(1, 2, 1, 2) x1 <- c(5, 3, 6, 2) x2 <- c(6, 5, 1, 4) mydata <- data.frame(id, time, x1, x2) # Caixa de dados original cat("Caixa de dados original:\n") print(mydata) # Integração md <- melt(mydata, id = c("id","time")) cat("\nIntegração:\n") print(md)
O resultado da execução do código acima é:
Caixa de dados original: id time x1 x2 1 1 1 5 6 2 1 2 3 5 3 2 1 6 1 4 2 2 2 4 Integração: id time variable value 1 1 1 x1 5 2 1 2 x1 3 3 2 1 x1 6 4 2 2 x1 2 5 1 1 x2 6 6 1 2 x2 5 7 2 1 x2 1 8 2 2 x2 4
A função cast é usada para restaurar dados combinados, dcast() retorna uma caixa de dados, acast() retorna um vetor/Matriz/Array.
Sintaxe do formato da função cast():
dcast( data, formula, fun.aggregate = NULL, ... margins = NULL, subset = NULL, fill = NULL, drop = TRUE, value.var = guess_value(data) ) acast( data, formula, fun.aggregate = NULL, ... margins = NULL, subset = NULL, fill = NULL, drop = TRUE, value.var = guess_value(data) )
Descrição dos parâmetros:
data: Caixa de dados combinada.
formula: Formato de dados重塑ados, semelhante a x ~ y, x como rótulo de linha, y como rótulo de coluna.
fun.aggregate: Função de agregação, usada para processar valores.
margins: Vetor de nomes de variáveis (pode incluir "grand\_col" e "grand\_row"), usado para calcular margens, configura TURE para calcular todas as margens.
subset: Filtros condicionais para os resultados, formato semelhante subset = .(variable=="length")。
drop:Se manter o valor padrão.
value.var:Seguido pelo campo a ser tratado.
# Carregar bibliotecas library(MASS) library(reshape2) library(reshape) # Criar data frame id<- c(1, 1, 2, 2) time <- c(1, 2, 1, 2) x1 <- c(5, 3, 6, 2) x2 <- c(6, 5, 1, 4) mydata <- data.frame(id, time, x1, x2) # Integração md <- melt(mydata, id = c("id","time")) # Imprimir conjunto de dados recastado usando função cast() cast.data <- cast(md, id~variable, mean) print(cast.data) cat("\n") time.cast <- cast(md, time~variable, mean) print(time.cast) cat("\n") id.time <- cast(md, id~time, mean) print(id.time) cat("\n") id.time.cast <- cast(md, id+time~variable) print(id.time.cast) cat("\n") id.variable.time <- cast(md, id+variable~time) print(id.variable.time) cat("\n") id.variable.time2 <- cast(md, id~variable+time) print(id.variable.time2)
O resultado da execução do código acima é:
id x1 x2 1 1 4 5.5 2 2 4 2.5 time x1 x2 1 1 5.5 3.5 2 2 2.5 4.5 id 1 2 1 1 5.5 4 2 2 3.5 3 id time x1 x2 1 1 1 5 6 2 1 2 3 5 3 2 1 6 1 4 2 2 2 4 id variable 1 2 1 1 x1 5 3 2 1 x2 6 5 3 2 x1 6 2 4 2 x2 1 4 id x1_1 x1_2 x2_1 x2_2 1 1 5 3 6 5 2 2 6 2 1 4