for 루프로 쉽게 해결할 수있는 질문이 있습니다. 그러나 데이터 프레임에 수십만 행이 있기 때문에 계산 시간이 매우 오래 걸리므로 빠르고 효율적인 솔루션을 찾고 있습니다. 제 dataframe의 각 행에 대해 각 행에 대해 셀의 다른 값과 일치하는 열 이름의 값을 추출하십시오.
는, I는 그 열 이름 (INDEX) 첫 번째 열 중 하나와 일치dataframe이
> mydata
INDEX 1 2 3 4 5 6
1 2 18.9 9.5 22.6 4.7 16.2 7.4
2 2 18.9 9.5 22.6 4.7 16.2 7.4
3 2 18.9 9.5 22.6 4.7 16.2 7.4
4 4 18.9 9.5 22.6 4.7 16.2 7.4
5 4 18.9 9.5 22.6 4.7 16.2 7.4
6 5 18.9 9.5 22.6 4.7 16.2 7.4
같다 셀의 값을 붙여하고자 여기를 재생 코드입니다 :
mydata <- data.frame(INDEX=c(2,2,2,4,4,5), ONE=(rep(18.9,6)), TWO=(rep(9.5,6)),
THREE=(rep(22.6,6)), FOUR=(rep(4.7,6)), FIVE=(rep(16.2,6)), SIX=(rep(7.4,6)))
colnames(mydata) <- c("INDEX",1,2,3,4,5,6)
는 그리고이 새로 계산 된 변수를 사용하여 새로운 dataframe입니다 :
,> new_mydf
INDEX 1 2 3 4 5 6 VARIABLE
3 2 18.9 9.5 22.6 4.7 16.2 7.4 9.5
2 2 18.9 9.5 22.6 4.7 16.2 7.4 9.5
1 2 18.9 9.5 22.6 4.7 16.2 7.4 9.5
5 4 18.9 9.5 22.6 4.7 16.2 7.4 4.7
4 4 18.9 9.5 22.6 4.7 16.2 7.4 4.7
6 5 18.9 9.5 22.6 4.7 16.2 7.4 16.2
여기서는 for 루프를 사용하여 해결했지만, 위에서 썼 듯이 루프는 다음과 같이 단순 솔루션 (어쩌면 dplyr이나 다른 함수를 사용하고 있습니까?)을 찾고 있습니다.
mydata$VARIABLE<-apply(mydata, 1, function(x) { x[names(x)==x[names(x)=="INDEX"]] })
편집 : 내 확장 된 데이터 세트에 대한 느린 루프를 바탕으로
는id = mydata$INDEX
new_mydf <- data.frame()
for (i in 1:length(id)) {
mydata_row <- mydata[i,]
value <- mydata_row$INDEX
mydata_row["VARIABLE"] <- mydata_row[,names(mydata_row) == value]
new_mydf <- rbind(mydata_row,new_mydf)
}
new_mydf <- new_mydf[ order(new_mydf[,1]), ]
는이있다 : http://stackoverflow.com/q/33310179/ – Frank
감사합니다. data.table의 솔루션은 잘 작동합니다! – refroll