2017-11-12 1 views
0

개인이 가질 수있는 동료 수를 ​​알려주는 목록이 있습니다. 그것은 다음과 같습니다여러 목록을 하나의 데이터 프레임으로 변환하는 방법

목록 :

$`A1` 
[1] "D2" "E2" "F2" "H2" 
$`B1` 
[1] "G2" "I2" "J2" "K2" "L2" 
$`C1` 
[1] "J2" "M2" "N2" "O2" "P2" 
[6] "Q2" "R2" "S2" 

그래서 예를 들어, 개별 A1의 가능한 동료 D2, 개별 E2, 개인 F2, 개인 H2 개인 있습니다.

개인을 가능한 동료와 짝을 짓는 데이터 프레임으로 바꾸고 싶습니다.

DF :

Female ID Mate ID 
     A1  D2  
     A1  E2 
     A1  F2 
     A1  H2 
     B1  G2 
     B1  I2 
     B1  J2 
     B1  K2 
     B1  L2 
     C1  J2 
     C1  M2 
     C1  N2 
     C1  O2 
     C1  P2 
     C1  Q2 
     C1  R2 
     C1  S2 

답변

5

나는이 문제에 대한 purrr:map_df을 좋아한다 :

귀하의 데이터

L <- list(A1 = c("D2", "E2", "F2", "H2"), 
    B1 = c("G2", "I2", "J2", "K2", "L2"), 
    C1 = c("J2", "M2", "N2", "O2", "P2", "Q2", "R2", "S2")) 

솔루션 내가 좋아하는

library(purrr) 
map_df(L, ~data.frame("Mate.ID" = .x), .id="Female.ID") 

    # Female.ID Mate.ID 
# 1   A1  D2 
# 2   A1  E2 
# 3   A1  F2 
# 4   A1  H2 
# 5   B1  G2 
# etc 

그래서 나는 이런 식으로 뭔가를 원하는 map_df은 유용한 목록 항목의 이름을 첨부하는 유용한 .id 때문입니다. (이것은 또한 쓸 수 있습니다 ...)

map_df(L, function(i) data.frame("Mate.ID" = i), .id="Female.ID") 

+0

미안 늦은 응답을 위해. 그것이 효과가있는 것처럼 보인다! "## bind_rows_ (x, .id) 경고 : 불일치 요소 수준 : 문자로 강제 변환 ## bind_rows_ (x, .id)의 경고 : 문자 및 요소 벡터 바인딩, ## 강제로 캐릭터 벡터 " 걱정해야 할 것이 있습니까? –

+0

아닙니다. 바인딩하기 전에 예제 데이터를 요소 (요소)로 변환해야한다는 것을 알 수 있습니다. 요소가 아닌 문자 인 데이터 집합으로 시작하면이 경고가 표시되지 않습니다. – CPak

2

하나의 솔루션은 기본 R 사용 (... .xfunction(i) i에 대한 속기) :

mylist <- list(A1=c("D2", "E2", "F2", "H2"), 
      B1=c("G2", "I2", "J2", "K2", "L2"), 
      C1=c("J2", "M2", "N2", "O2", "P2", "Q2", "R2", "S2")) 

mydf <- lapply(1:length(mylist), function(i) { 
    data.frame(`Female ID`=names(mylist)[i], `Mate ID`=mylist[[i]], stringsAsFactors=F, check.names=F) 
}) 

mydf <- do.call(rbind, mydf) 
관련 문제