I, 말 {A, B, C, D ...} 각 요소 A, B, C, D, ...의 목록을 가질 것이있다 data.table
I의 위해, 그러나, 순서를 반대로 할 필요가 data.table
I 만 원하는 rev()
그것이 한, 첫 번째 열을 제외하고 그것의 모든 ID
. 루프를 사용하여 시도했지만 반환되었습니다.
Error in `[<-.data.table`(`*tmp*`, , -1, value = list(code_a = c("a", :
Item 1 of column numbers in j is -1 which is outside range [1,ncol=4]. Use column names instead in j to add new columns.
예:
a <- c("a","b","c","d","e","f")
b <- 1:6
c <- c("F","E","D","C","B","A")
d <- 10:15
dt1 <- data.table("ID" = b, "code_a" = a)
dt2 <- data.table("ID" = b, "code_c" = c)
dt3 <- data.table("ID" = b, "code_d" = d)
dt <- list(dt1,dt2,dt3)
rev_dt <- rev(dt)
merged_list <- list()
rev_merged_list <- list()
rev_merged_list <- Reduce(merge, rev_dt, accumulate = TRUE)
merged_list <- rev_merged_list
merged_list <- rev(merged_list)
for(z in 1:length(dt)){
merged_list[[z]][,-1] = rev(merged_list[[z]][,-1])
}
추가 정보:
여기서 for 루프는 다음 과 같아야 합니다.-for z
1에서 길이까지 dt
- merged_list
요소 z (이중 대괄호 포함)는 a 여야합니다 data.table
-데이터에 첫 번째 열이 포함되지 않은 경우-rev에 할당되어야합니다. 첫 번째 열도 제외되는 동일한 요소 z
이 논리는 위의 루프에 적용됩니까? 나는 무엇이 잘못되었는지 잘 모르겠습니다!
예상 출력 :
output_ <- list()
a_ <- data.table("ID" = b, "code_a" = a, "code_c" = c, "code_d" = d)
b_ <- data.table("ID" = b, "code_c" = c, "code_d" = d)
c_ <- data.table("ID" = b, "code_d" = d)
output_[[1]] <- a_
output_[[2]] <- b_
output_[[3]] <- c_
output_
나는 어제 위의 병합이 오른손 병합을 지정할 수 있다고 들었지만 그렇게 할 때 병합에 a를 지정해야 by = "ID"
하지만 여러 데이터 세트를 병합하는 경우 x
및 y
값 이 무엇인지 확실하지 않습니다.
나는 또한 lapply()
루프 대신에 같은 일 을 할 수 있다는 인상을 받고 있지만,이 경우 어떻게 그것을 달성 할 수 있을지 모르겠습니다. 고마워 ~
우리는 사용할 수 있습니다 setcolorder
for(i in seq_along(merged_list)){
setcolorder(merged_list[[i]],
c(names(merged_list[[i]])[1], rev(names(merged_list[[i]])[-1])))
}
all.equal(merged_list, output_, check.attributes = FALSE)
#[1] TRUE
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다