2017-12-19 4 views
0

세 가지 변수 유형 간의 관계를 설명하는 두 개의 데이터 프레임이 있습니다. 이러한 dataframes는 다음과 같다 :변수 간의 관계 데이터 프레임 처리

df1 <- data.frame(id = c("y1", "y2", "y3"), 
        x1 = c(1, 0, 0), 
        x2 = c(0, 1, 0), 
        x3 = c(0, 1, 1)) 
df2 <- data.frame(item = c("z1", "z2", "z3"), 
        x1 = c(1, 1, 1), 
        x2 = c(0, 1, 0), 
        x3 = c(0, 1, 1)) 

은 본질적으로, Y 및 Z 변수 사이의 관계를 설명하는 각 dataframe의 COLNAMES에 표시된 변수 X. 출력으로 y1, y2 및 y3 각각에 대한 변수를 원합니다. 각 변수는 그 변수와 일치하는 z 변수의 벡터 여야합니다. 예를 들어, y1은 x1에 해당하고 x1은 z 항목 3 개 모두에 해당되므로 y1에는 c (z1, z2, z3)가 포함되어야합니다.

모든 방법으로 중첩 된 for 루프 및 적용 문을 시도했으며이를 수행하는 방법을 파악하지 못했습니다.

답변

1

이와 비슷한?

library(tidyverse) 
df1 %>% 
    gather(k, v1, -id) %>% 
    filter(v1 != 0) %>% 
    inner_join(gather(df2, k,v2, -item) %>% filter(v2 != 0), by="k") %>% 
    group_by(id) %>% 
    summarise(n=paste(unique(item), collapse = ",")) 
# A tibble: 3 x 2 
     id  n 
    <fctr> <chr> 
1  y1 z1,z2,z3 
2  y2 z2,z3 
3  y3 z2,z3 

아니면 rowwise

df1 %>% 
    gather(k, v1, -id) %>% 
    filter(v1 != 0) %>% 
    rowwise() %>% 
    mutate(res=paste(df2$item[ select(df2, k) == 1 ], collapse=",")) %>% 
    ungroup() 
# A tibble: 4 x 4 
     id  k v1  res 
    <fctr> <chr> <dbl> <chr> 
1  y1 x1  1 z1,z2,z3 
2  y2 x2  1  z2 
3  y2 x3  1 z2,z3 
4  y3 x3  1 z2,z3 
시도
관련 문제