English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
R 언어 데이터 프레임 병합 사용 merge() 함수。
merge() 함수 문법 형식은 다음과 같습니다:
# S3 메서드 merge(x, y, …) # data.frame의 S3 메서드 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, …)
일반 파라미터 설명:
x, y:데이터 프레임
by, by.x, by.y:두 데이터 프레임의 매치 열 이름을 지정합니다. 기본적으로 두 데이터 프레임의 동일한 열 이름을 사용합니다.
all:정리 값; all = L은 all.x = L과 all.y = L의 줄임말입니다. L은 TRUE 또는 FALSE일 수 있습니다.
all.x:정리 값, 기본적으로 FALSE입니다. TRUE로 설정되면 y에 해당하는 매치가 없더라도 x에 매치되는 행을 표시합니다. y에 매치가 없는 행은 NA로 표시됩니다.
all.y:정리 값, 기본적으로 FALSE입니다. TRUE로 설정되면 x에 해당하는 매치가 없더라도 y에 매치되는 행을 표시합니다. x에 매치가 없는 행은 NA로 표시됩니다.
sort:정리 값, 열을 정렬할지 여부입니다.
merge() 함수와 SQL의 JOIN 기능이 매우 유사합니다:
Natural join 또는 INNER JOIN:테이블에 최소한 하나의 매치가 있으면 행을 반환합니다
Left outer join 또는 LEFT JOIN:우측 테이블에 매치가 없더라도 좌측 테이블의 모든 행을 반환합니다
Right outer join 또는 RIGHT JOIN:좌측 테이블에 매치가 없더라도 우측 테이블의 모든 행을 반환합니다
Full outer join 또는 FULL JOIN:只要其中一个表中存在匹配,则返回行
# 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)
위의 코드를 실행한 결과는 다음과 같습니다:
[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> USA 5 8 <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> USA 5 8 <NA> <NA> <NA> <NA> IN
R 언어에서 사용됩니다 melt() 및 cast() 데이터 통합 및 분할에 사용되는 함수입니다.
melt() : 넓은 형식 데이터를 장 형식으로 변환합니다.
cast() : 장 형식 데이터를 넓은 형식으로 변환합니다.
아래 그림은 melt()와 cast() 함수의 기능을 잘 보여줍니다(이후 예제에서 자세히 설명됩니다):
melt()은 데이터 셋의 각 열을 하나의 열로 쌓아집니다, 함수 문법 형식:
melt(data, ..., na.rm = FALSE, value.name = "value")
파라미터 설명:
data: 데이터 셋.
...: 다른 메서드에 전달되거나 다른 메서드에서 전달된 다른 매개변수.
na.rm: 데이터 셋에서 NA 값을 제거할지 여부.
value.name 변수 이름, 값을 저장하는 데 사용됩니다.
다음 작업을 수행하기 전에, 먼저 필요한 패키지를 설치합니다:
# 라이브러리를 설치합니다, MASS는 많은 통계 관련 함수, 도구 및 데이터 세트를 포함합니다 install.packages("MASS", repos = "https://mirrors.ustc.edu.cn/CRAN/) # melt()과 cast() 함수는 라이브러리에 대한 필요성이 있습니다 install.packages("reshape2", repos = "https://mirrors.ustc.edu.cn/CRAN/) install.packages("reshape", repos = "https://mirrors.ustc.edu.cn/CRAN/)
테스트 예제:
# 라이브러리 로드 library(MASS) library(reshape2) library(reshape) # 데이터 프레임 생성 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) # 원본 데이터 프레임 cat("원본 데이터 프레임:\n") print(mydata) # 통합 md <- melt(mydata, id = c("id","time")) cat("\n통합 후:\n") print(md)
위의 코드를 실행한 결과는 다음과 같습니다:
원본 데이터 프레임: id 시간 x1 x2 1 1 1 5 6 2 1 2 3 5 3 2 1 6 1 4 2 2 2 4 통합 후: 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
cast 함수는 결합된 데이터 프레임을 원래 형식으로 되돌리는 데 사용되며, dcast()는 데이터 프레임을 반환하며, acast()는 벡터를 반환합니다/행렬/배열.
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) )
파라미터 설명:
data: 결합된 데이터 프레임.
formula: 재구성된 데이터의 형식, x ~ y 형식과 유사합니다, x는 행 레이블, y는 열 레이블입니다.
fun.aggregate: value 값을 처리하는 데 사용되는 집계 함수.
margins: 변수 이름의 벡터( "grand\_col" 과 "grand\_row"를 포함할 수 있습니다), 각각의 각도를 계산하는 데 사용되며, TURE를 설정하면 모든 각도를 계산합니다.
subset: 결과를 조건별로 필터링합니다, 형식은 유사합니다 subset = .(variable=="length")。
drop: 기본 값 유지 여부.
value.var: 처리할 필드 뒤에 따르는 값.
# 라이브러리 로드 library(MASS) library(reshape2) library(reshape) # 데이터 프레임 생성 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) # 통합 md <- melt(mydata, id = c("id","time")) # Recasted dataset을 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)
위의 코드를 실행한 결과는 다음과 같습니다:
id x1 x2 1 1 4 5.5 2 2 4 2.5 시간 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 시간 x1 x2 1 1 1 5 6 2 1 2 3 5 3 2 1 6 1 4 2 2 2 4 id 변수 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