R과 새롭게 등장한이 유형의 경우 비교적 새로운 것으로 검색되어 도움이되는 정보를 많이 찾을 수 없습니다.중복 행이있는 다중 데이터 프레임을 병합 R
나는 각각 40,000 - 60,000 개의 행으로 약 150 개의 .csv 파일을 가지고 있으며, 각각에서 3 개의 열을 1 개의 큰 데이터 프레임으로 병합하려고합니다. 각 파일에서 관심있는 3 개의 칼럼 ("id", "name"및 "value")을 추출하고 "id"와 "name"을 큰 데이터 프레임 "MergedData"로 병합하는 작은 스크립트가 있습니다.
file_list <- list.files()
for (file in file_list){
if(!exists("MergedData")){
MergedData <- read.csv(file, skip=5)[ ,c("id", "name", "value")]
colnames(MergedData) <- c("id", "name", file)
}
else if(exists("MergedData")){
temp_data <- read.csv(file, skip=5)[ ,c("id", "name", "value")]
colnames(temp_data) <- c("id", "name", file)
MergedData <- merge(MergedData, temp_data, by=c("id", "name"), all=TRUE)
rm(temp_data)
}
}
아니 모든 파일이 있습니다 : 여기 내 코드 (! 난이이 일을 매우 비효율적 인 방법입니다 확신하고 지금은 나와 함께 괜찮아요,하지만 물론 내가 더 나은 옵션 열려있어)입니다 많은 행이 많은 파일에 공통적이긴하지만 같은 수의 행. 포괄적 인 행 목록이 없으므로 MergedData 파일에 아직 존재하지 않는 새 행을 추가하려면 all = TRUE가 포함되었습니다.
내 문제는 : 파일의 대부분은 동일한 "id"및 "name"항목이 있지만 "value"항목이 다른 2-4 개의 행을 포함하고 있습니다. 그래서, 그것들을 병합 할 때 가능한 모든 조합에 대해 행을 추가하게됩니다. 가장 절망적 인 점은 이러한 복제물이 나에게 전혀 관심이 없다는 것입니다. 첫 번째 항목의 값을 가져와 더 이상의 중복 항목을 무시하는 간단한 방법이 있습니까?
감사합니다. 귀하의 의견을 바탕으로, 우리는 다음 각 파일을 스택 및 수
흠, 나는 이것을 충분히 설명했다고 생각하지 않는다. 나의 최종 목표는 "id", "name"열을 가진 데이터 프레임이고 150 개 파일 각각의 "value"에 대한 150 개 열입니다. 파일에 "id" "name"콤보 값이 있으면 원하는 경우 콤보를 입력하고 NA를 입력하지 않으면됩니다. 내가 그들을 쌓은 다음 중복 된 "id" "name"항목을 제거하면 관련 데이터가 제거되지 않습니까? – JRoon
업데이트 된 코드를보고 내가 찾고있는 코드에 더 가까이 있는지 알려주십시오. – eipi10
닫기입니다. '> df = bind_rows (df)' 경고 메시지 : 1 : rbind_all (x, .id)에서 같지 않은 요소 수준 : 문자로 강제 변환 됨 2 : rbind_all (x, .id)에서 : 동일하지 않은 요소 수준 : 문자로 강제 변환 '> df = dcast (df, id + name ~ source.file, value.var = "value")' 집계 기능이 누락되었습니다. 길이는 기본값으로 설정됩니다. 결과 데이터 프레임은 올바르게 구조화되어 있지만 값은 실제로 값 자체가 아닌 해당 행에 대한 각 .csv 파일의 항목 수입니다. – JRoon