내 작업에서 매우 일반적인 데이터 전처리 문제가 있습니다. 나는 일반적으로 결국 큰 일치 작업을 수행하려는 두 개의 파일이 있습니다. 일반적으로 첫 번째 단계는 첫 번째 파일의 "정리 된"데이터 프레임을 만드는 2 단계 프로세스이고 두 번째 단계는 더 큰 데이터 프레임의 두 번째 파일과 일치 (vlookup)하는 것입니다. 이 질문의 첫 번째 단계에 도움이 필요합니다. 아래에서 작업 할 간단한 예제를 만들었습니다. 내 단순화 된 데이터 프레임 :
c1 <- 1:15
c2 <- c("Valuelabels", "V1", "1", "2", "Valuelabels", "V2", "1", "2", "3", "Valuelabels", "V3", "1", "2", "3", "4")
c3 <- c("", "", "Male", "Female", "", "", "Married", "Single", "Other", "", "", "SingleWithChildren", "SingleWithoutChildren","MarriedWithChildren", "PartneredWithChildren")
df <- data.frame(row.names =c1,c2,c3)
df
c2 c3
1 Valuelabels
2 V1
3 1 Male
4 2 Female
5 Valuelabels
6 V2
7 1 Married
8 2 Single
9 3 Other
10 Valuelabels
11 V3
12 1 SingleWithChildren
13 2 SingleWithoutChildren
14 3 MarriedWithChildren
15 4 PartneredWithChildren
이제 첫 번째 열의 "Valuelabel"문자열에서 데이터 프레임을 분할하고 다음과 같은 새 데이터 프레임을 만들고 싶습니다.
V1 V1_match V2 V2_match V3 V3_match
1: 1 Male 1 Married 1 SingleWithChildren
2: 2 Female 2 Single 2 SingleWithoutChildren
3: NA 3 Other 3 MarriedWithChildren
4: NA NA 4 PartneredWithChildren
결국 V1을 열 이름으로 사용하고 그 아래에 일치하는 값을 내 예제에서 V1_match ...라는 이름 옆에 새 열로 데이터 프레임을 만들고 싶습니다.
이 데이터 프레임은 더 큰 데이터 프레임과 일치시키기 전에 1 단계를 마칩니다.
도움이 매우 좋습니다.
가능한 data.table
해결책 은 다음과 같습니다.
library(data.table) # v 1.9.5
setDT(df)[, indx := c2[2L], by = cumsum(c2 == "Valuelabels")]
df2 <- df[!grepl("\\D", c2)][, indx2 := seq_len(.N), by = indx]
dcast(df2, indx2 ~ indx, value.var = c("c2", "c3"))
# indx2 V1_c2 V2_c2 V3_c2 V1_c3 V2_c3 V3_c3
# 1: 1 1 1 1 Male Married SingleWithChildren
# 2: 2 2 2 2 Female Single SingleWithoutChildren
# 3: 3 NA 3 3 NA Other MarriedWithChildren
# 4: 4 NA NA 4 NA NA PartneredWithChildren
data.table
다음을 사용하여 실행 하려면 v> 1.9.5 를 설치해야합니다.
library(devtools)
install_github("Rdatatable/data.table", build_vignettes = FALSE)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다