2016-10-04 7 views
1

I로 쌓아 data.frame은 다음과 같습니다R 찾기 행 값 ifelse

a b c d column_name 
1 2 3 4 a 
2 3 4 1 b 
3 4 1 2 c 
4 1 2 3 d 

지금 내가있는 이름과 일치하는 컬럼의 각 행에 대한 값을 얻으려면 column_name. 나는 이렇게 ifelse와 이것을 구축 :

df$value <- ifelse(df$column_name=="a", df$a, 
ifelse(df$column_name=="b", df$b, 
ifelse(df$column_name=="c", df$c, 
ifelse(df$column_name=="d", df$d, "NA")))) 

그러나 이것은 아주 예쁘고 효율적이지 않습니다. 4 개 이상의 가능한 열이 있으면 사용할 수 없게됩니다.

누구보다 효율적이고 아름다운 방법을 알고 있습니까? apply()을 시도했지만 제대로 작동하지 못했습니다.

답변

2

우리 cbind이를 행 인덱스 (1:nrow(df))와 데이터 세트의 열 이름 (match(df$column_name, colnames(df)))을 갖는 'COLUMN_NAME'를 보내고 match 의한 열 인덱스를 생성이를 바탕 'DF'의 요소를 추출하여 할당 할 (<-) '값'열을 만듭니다.

df$value <- df[-ncol(df)][cbind(1:nrow(df), match(df$column_name, colnames(df)))] 
df$value 
#[1] 1 3 1 3 
+1

빠르고 명확한 설명에 감사드립니다! – Jesse