각각 구조가 동일한 목록의 목록이 있습니다. 각 하위 목록의 요소 중 하나는 키 값입니다. 각 하위 목록에 새 요소를 추가하고 싶습니다.이 요소는 일치하는 키 값이 포함 된 데이터 프레임의 행입니다. 나는 이것이 하나의 목록을 제외하고는 기본적으로 '합병'과 같다고 생각한다.데이터 프레임을 키 값을 기반으로하는 목록과 병합하는 효율적인 방법
그래서이
#Define the list of lists and the data frame
l <- list()
l[[1]] <- list(i=1, data=1:5)
l[[2]] <- list(i=2, data=runif(5))
l[[3]] <- list(i=1, data=rnorm(5))
d <- data.frame(i=c(1, 2), val1=c(TRUE, FALSE), val2 = c("a", "b"))
내가 $newData
해당되는으로, l_mod
의 각 요소에 대해 등등
> l_mod[[1]]
$i
[1] 1
$data
[1] 1 2 3 4 5
$newData
val1 val2
TRUE a
으로 끝낼 그리고 싶습니다처럼 내 목록과 데이터 프레임보기 행은 d
입니다. d
의 각 행에는 d$i
의 고유 한 값이 있다고 가정 할 수 있습니다.
내 현재의 접근 방식은 일치하는 함수를 작성하고 lapply
matchingRow <- function(indexValue, df) {
return(df[df$i==indexValue, -1])
}
l_mod <- lapply(l, function(x) c(x, newData=matchingRow(x$i, d)))
이 기본적으로 작동에서 호출하는 것이지만, overcomplicated 보인다. (또한 d
의 각 열을 새 목록의 별도 요소로 분할하므로 전체 1 행 데이터 프레임을 단일 목록 요소로 배치합니다.)
더 간단한 방법이 있나요?
괄호 For 문을 데리고 좋은 것 같은데, 당신은 데이터 프레임을 부분 집합 때 ..., = FALSE 드롭] 사용하고 싶습니다. drop = TRUE가 기본값입니다. –
@MatthewLundberg, 여기서 방울이 어떻게 생겨나나요? 행렬 및 배열에만 관련이 있습니까? –
은'''d''의 열이 별도의 목록 요소로 반환되지 않도록'''list()'''에''newData = matchingRow (x $ i, d)''를 래핑합니다. 왜 matchingRow를 정의할까요? 당신은 할 수 있습니다 :'''lapply (l, function (x) c (x, list (newData = d [d $ i == x $ i, -1]))))''' – jbaums