초보자 인 data.table
에서 조인을 수행 한 다음 열을 돌연변이했습니다. data.table join then add columns to existing data.frame without re-copy 스레드가 발견되었지만 더 이상 진행할 수 없었습니다.중간 테이블을 사용하지 않고 data.table을 사용하여 변이했습니다.
dplyr
을 사용하여 원하는 작업을 수행 할 수 있지만 크기 때문에 실제 데이터에서이 코드를 실행할 수는 없습니다. 게다가 전술 한 이유로 인해 중간 테이블을 만들 수 없습니다. 여기
dplyr
입력
DFI = structure(list(PO_ID = c("P1234", "P1234", "P1234", "P1234",
"P1234", "P1234", "P2345", "P2345", "P3456", "P4567"), SO_ID = c("S1",
"S1", "S1", "S2", "S2", "S2", "S3", "S4", "S7", "S10"), F_Year = c(2012,
2012, 2012, 2013, 2013, 2013, 2011, 2011, 2014, 2015), Product_ID = c("385X",
"385X", "385X", "450X", "450X", "900X", "3700", "3700", "A11U",
"2700"), Revenue = c(1, 2, 3, 34, 34, 6, 7, 88, 9, 100), Quantity = c(1,
2, 3, 8, 8, 6, 7, 8, 9, 40), Location1 = c("MA", "NY", "WA",
"NY", "WA", "NY", "IL", "IL", "MN", "CA")), .Names = c("PO_ID",
"SO_ID", "F_Year", "Product_ID", "Revenue", "Quantity", "Location1"
), row.names = c(NA, 10L), class = "data.frame")
룩업 테이블을 사용하여 내 데이터와 솔루션입니다
DF_Lookup = structure(list(PO_ID = c("P1234", "P1234", "P1234", "P2345",
"P2345", "P3456", "P4567"), SO_ID = c("S1", "S2", "S2", "S3",
"S4", "S7", "S10"), F_Year = c(2012, 2013, 2013, 2011, 2011,
2014, 2015), Product_ID = c("385X", "450X", "900X", "3700", "3700",
"A11U", "2700"), Revenue = c(50, 70, 35, 100, -50, 50, 100),
Quantity = c(3, 20, 20, 20, -10, 20, 40)), .Names = c("PO_ID",
"SO_ID", "F_Year", "Product_ID", "Revenue", "Quantity"), row.names = c(NA,
7L), class = "data.frame")
출력
,536,913dplyr
및
compare
내가
DFI
로 룩업 테이블에서 새 항목을 추가 가입 왼쪽으로 사용하고
을 : 63,210
DFO = structure(list(PO_ID = c("P1234", "P1234", "P1234", "P1234",
"P1234", "P1234", "P2345", "P2345", "P3456", "P4567"), SO_ID = c("S1",
"S1", "S1", "S2", "S2", "S2", "S3", "S4", "S7", "S10"), F_Year = c(2012,
2012, 2012, 2013, 2013, 2013, 2011, 2011, 2014, 2015), Product_ID = c("385X",
"385X", "385X", "450X", "450X", "900X", "3700", "3700", "A11U",
"2700"), Revenue = c(16.6666666666667, 16.6666666666667, 16.6666666666667,
35, 35, 35, 100, -50, 50, 100), Quantity = c(1, 1, 1, 10, 10,
20, 20, -10, 20, 40), Location1 = c("MA", "NY", "WA", "NY", "WA",
"NY", "IL", "IL", "MN", "CA")), .Names = c("PO_ID", "SO_ID",
"F_Year", "Product_ID", "Revenue", "Quantity", "Location1"), row.names = c(NA,
10L), class = "data.frame")
여기 여기 두 개의 라이브러리를 사용하고 dplyr
를 사용하여 내 코드입니다. 그런 다음 그룹의 행 수를 기반으로 수익 및 열을 나누고 있습니다. 이것은 그룹화 할 때 숫자의 팽창을 막기 위해서입니다.
compare(DF_Generated,DFO,allowAll = TRUE)
TRUE
내가 진심 거라고 어떤 도움을 주셔서 감사합니다 :
DF_Generated <- DFI %>%
dplyr::left_join(DF_Lookup,by = c("PO_ID", "SO_ID", "F_Year", "Product_ID")) %>%
dplyr::group_by(PO_ID, SO_ID, F_Year, Product_ID) %>%
dplyr::mutate(Count = n()) %>%
dplyr::ungroup()%>%
dplyr::mutate(Revenue = Revenue.y/Count, Quantity = Quantity.y/Count) %>%
dplyr::select(PO_ID:Product_ID,Location1,Revenue,Quantity)
다음은 출력 일치하는 방법입니다.
확인. 내가하고있는 일은 왼쪽 조인입니다. 결과에서 컬럼을 변경합니다. 그럼에도 불구하고 몇 줄을 써 보겠습니다. 나는 논리를 추가했다. – watchtower