2014-07-14 2 views
0

의 세 번째 열 중 하나이므로 해결할 수 없습니다. 예 데이터 세트 :다른 이름의 값이있는 새 열이 R

company <- c("compA","compB","compC") 
compA <- c(1,2,3) 
compB <- c(2,3,1) 
compC <- c(3,1,2) 
df <- data.frame(company,compA,compB,compC) 

나는 같은 라인의 열 "회사"에 이름 열에서 값을 가진 새 열을 만들려고합니다. 결과 추출은 다음과 같습니다.

df$new <- c(1,3,2) 
df 
+0

'안양 $ 새 = diag를 (as.matrix (안양 [ , 2 : 4]))' – eddi

답변

0

설정 방식에 따라 모든 회사에 대해 하나의 행과 하나의 열이 있으며 행과 열의 순서는 같습니다. 이것이 실제 데이터 세트라면 다른 사람들이 diag(...)이 해결책이라고 말했고 그 대답을 선택해야합니다. 실제 데이터 세트는 회사의 인스턴스를 두 개 이상있는 경우

은 (예를 들면, 기업 당 하나 이상의 행, 다음이 더 일반적이다 :

# using your df 
sapply(1:nrow(df),function(i)df[i,as.character(df$company[i])]) 
# [1] 1 3 2 

# more complex case 
set.seed(1) # for reproducible example 
newdf <- data.frame(company=LETTERS[sample(1:3,10,replace=T)], 
        A = sample(1:3,10,replace=T), 
        B=sample(1:5,10,replace=T), 
        C=1:10) 
head(newdf) 
# company A B C 
# 1  A 1 5 1 
# 2  B 1 2 2 
# 3  B 3 4 3 
# 4  C 2 1 4 
# 5  A 3 2 5 
# 6  C 2 2 6 
sapply(1:nrow(newdf),function(i)newdf[i,as.character(newdf$company[i])]) 
# [1] 1 2 4 4 3 6 7 2 5 3 
+0

좋은 대답, 내 의도를 예측 한 것입니다. 이건 더 복잡한 경우에요. 고마워요! – drpacoqc

0

편집 : eddi의 대답은 아마도 좋습니다. 개별 행 벡터가 아닌 데이터 프레임을 사용할 확률이 높습니다.

귀하의 질문을 이해할 수 있을지 확신 할 수 없으므로 귀하의 설명에서 불분명합니다. 그러나 "이름이 같은 줄의"회사 "에있는 장소이기 때문에 데이터 값의 대각선을 요구하는 것 같습니다. 다음 작업을 수행합니다 :

df$new <- diag(matrix(c(compA,compB,compC), nrow = 3, ncol = 3)) 

diag 함수는 매트릭스의 대각선을 반환합니다. 그래서 저는 처음에 3 개의 원본 벡터를 하나의 벡터로 연결 한 다음 3 행 3 열의 행렬로 래핑하도록 지정했습니다. 그 다음 나는 대각선을 택했다. 모든 것이 데이터 프레임에 추가됩니다.

질문에 대한 답변을 했습니까?

+0

더 많은 데이터 프레임 문제와 첫 번째 대답은 더욱 역동적 인 것처럼 보입니다. 그러나 코드를 작성할 수있는 목록과 번호를 추가 할 수 있습니다. – drpacoqc

관련 문제