2017-02-20 1 views
0

예제 데이터 세트와 원하는 결과를 자세히 살펴보고이 질문의 목적을 확인하십시오. 내가 찾고있는 데이터 세트 솔루션이 합병되지는 않습니다. 그래서 대답도 여기에서 찾을 수 없습니다 : How to join (merge) data frames (inner, outer, left, right)?, 여기도 Use apply() to assign value to new column입니다. 오히려 새로운 colnames에 조건을 충족 시키면 값을 할당하는 솔루션을 의미합니다. 여기for 루프의 새 열에 셀 값 할당

내가하고 싶은 것의 재현 그림 :

Email 
1 [email protected] 
2 [email protected] 
3 [email protected] 
4 [email protected] 
5 [email protected] 

    Code Email 
1 Z001 [email protected] 
2 Z002 [email protected] 
3 Z003 [email protected] 
4 Z004 [email protected] 
5 Z005 [email protected] 

원하는 출력 :이 다음 예제 데이터 세트 결과

Email <- as.factor(c("[email protected]", "[email protected]", "[email protected]","[email protected]", "[email protected]")) 
dataset1 <- data.frame(Email) 


Code <- as.factor(c("Z001", "Z002", "Z003","Z004","Z005")) 
Email <- as.factor(c("[email protected]", "[email protected]", "[email protected]", "[email protected]","[email protected]")) 
dataset2 <- data.frame(Code, Email) 

Email  Z002 Z004 
    1 [email protected] NA  1 
    2 [email protected] 1  NA 
    3 [email protected] NA  NA 
    4 [email protected] NA  NA 
    5 [email protected] NA  NA 

을 그래서 dataset2의 Email이 dataset1에서 발생하는지 여부를 확인하는 루프를 작성하고이 조건이 참인 경우 dataset2의 전자 메일과 연관된 코드가 dataset1의 새 열 이름으로 지정되며이 관찰의 셀 값으로 1이 지정됩니다. 이 작업을 수행하려는 시도와 원하는 출력의 예가 질문을 명확히합니다.

(나는 그것이 잘못 알고 있지만, 내 의도를 보여줍니다)을 해결하기 위해 내 자신의 시도 :

for(i in 1:nrow(dataset2)){ 
    if(dataset2$Email[i] %in% dataset1$Email) 
    dataset1[,dataset2$Code[i]] <- dataset2$Code[i] 
    dataset1[,dataset2$Code[i]][i] <- 1 
} 

이 좋은 것입니다 누군가가 나를 도울 수 있다면.

답변

1

dataset2은 "긴"형식입니다. Code 열을 여러 열로 변경하면 "와이드"형식으로 변경됩니다. 따라서 조인 이외에 길이가 넓은 것에서부터 넓은 것으로 변환해야합니다 - this R-FAQ is a good read on that. 이 두 작업을 결합하여 다음과 같이합니다.

dat = merge(dataset1, dataset2, all.x = T) ## left join 
dat$value = 1 ## add the value we want in the result 
## convert long to wide 
result = reshape2::dcast(dat, Email ~ Code, value.var = "value", drop = T) 
result["NA"] = NULL ## remove the NA column that is added 
result 
#  Email Z002 Z004 
# 1 [email protected] NA 1 
# 2 [email protected] 1 NA 
# 3 [email protected] NA NA 
# 4 [email protected] NA NA 
# 5 [email protected] NA NA 
+0

정말 고마워요! 나는 당신의 도움이 매우 감사하게 될 정도로 이것을 오랫동안 찾고 있었다 :) – Floris