2016-08-23 4 views
0

데이터 프레임의 각 행에 대해 세 번째 열의 값에 따라 값을 한 열에서 다른 열로 복사하려고합니다. 열의 값에 따라 다른 열의 값 가져 오기

나는 루프 및 경우 결합 기능을 수행하려고 :

## example 

condition <- c("1","2","2","1","2","","3","3") 
SZ01 <- c("1","1","1","1","1","","1","1") 
SZ02 <- c("2","2","2","2","2","","2","2") 
SZ03 <- c("3","3","3","3","3","","3","3") 


df <- data.frame(cbind(condition,SZ01,SZ02,SZ03), stringsAsFactors = FALSE) 


df$retribution <- NULL 
df$special_prevention <- NULL 
df$general_prevention <- NULL 


for (i in 1:length(df$condition)){ 

    if (df$condition[i] == 1){ 

    df$retribution[i] <- df$SZ01[i] 
    df$special_prevention[i] <- df$SZ02[i] 
    df$general_prevention[i] <- df$SZ03[i] 


    }else if (df$condition[i] == 2) { 

    df$retribution[i] <- df$SZ02[i] 
    df$special_prevention[i] <- df$SZ03[i] 
    df$general_prevention[i] <- df$SZ01[i] 

    }else if (df$condition[i] == 3) { 

    df$retribution[i] <- df$SZ03[i] 
    df$special_prevention[i] <- df$SZ01[i] 
    df$general_prevention[i] <- df$SZ02[i] 

    } else { 
    df$retribution[i] <- "missing_condition" 
    df$special_prevention[i] <- "missing_condition" 
    df$general_prevention[i] <- "missing_condition" 

    } 
} 

이 (오류 메시지)를 작동하지 않을 것 같다,하지만 내 데이터를보고하는 것은 뭔가 잘못이 있어야합니다.

예를 들어 행 1은 condition == 1입니다. 즉,이 행의 경우 df$retribution은 행 1의 값과 동일한 값을 df$SZ01에 수신해야합니다.

하지만 그렇지 않습니다. 내가 만든 실수를 볼 수있는 사람이 있습니까?

+1

당신이 당신의 초기 data.frame의 및 원하는 출력의 예를 추가 할 수 있습니까? – thepule

+0

당신에게 더 이해가됩니까? 불행히도 내가 어떻게 테이블에 텍스트를 추가할지 모르겠다. – Mathias

+0

테이블을 추가하고 싶다면'dput (df)'명령의 결과를 붙여 넣기 만하면된다. 여기서 'df'는 원하는 데이터 프레임이다. 표시 할 수 있습니다. – thepule

답변

0

는 다음과 같은 시도 :

condition <- c("1","2","2","1","2","","3","3") 
SZ01 <- c("1","1","1","1","1","","1","1") 
SZ02 <- c("2","2","2","2","2","","2","2") 
SZ03 <- c("3","3","3","3","3","","3","3") 


df <- data.frame(cbind(condition,SZ01,SZ02,SZ03), stringsAsFactors = F) 

df$retribution <- ifelse(df$condition == "1", df$SZ01, 
         ifelse(df$condition == "2", df$SZ02, 
          ifelse(df$condition == "3", df$SZ03, "missing"))) 

df$special_prevention <- ifelse(df$condition == "1", df$SZ02, 
           ifelse(df$condition == "2", df$SZ03, 
             ifelse(df$condition == "3", df$SZ01, "missing"))) 

df$general_prevention <- ifelse(df$condition == "1", df$SZ03, 
           ifelse(df$condition == "2", df$SZ01, 
             ifelse(df$condition == "3", df$SZ02, "missing")))) 

출력 :

df 
    condition SZ01 SZ02 SZ03 retribution special_prevention general_prevention 
1   1 1 2 3   1     2     3 
2   2 1 2 3   2     3     1 
3   2 1 2 3   2     3     1 
4   1 1 2 3   1     2     3 
5   2 1 2 3   2     3     1 
6        missing   missing   missing 
7   3 1 2 3   3     1     2 
8   3 1 2 3   3     1     2 
+0

이 작동하지 않습니다 나 불행히도 :/ – Mathias

+0

그것은 다소 모호합니다. 오류가 있습니까? 내 코드의 출력이 올바른 것으로 기대되는 것보다 위에 있습니까? – thepule

+0

예 thats 내가 얻고 자하는 출력은 ... 그리고 나는 내 코드로도 같은 출력을 기대했습니다 ... 나는 어떤 오류 메시지도받지 못했지만 새로운 변수 (보복, special_prevention, general_prevention)의 모든 값은 value "2" – Mathias

관련 문제