나는 다음과 같은 데이터 세트가 있습니다r의 다른 키/ID 열에 따라 열을 행으로 전환하는 방법?
> head(Dataset)
IDCLIENT NUMDOSS PROV_200112 PROV_200212 PROV_200312 ....
H44879 0104957 0 0 0 ....
Z353025 0105289 0 0 0 ....
B416771 0105309 0 0 0 ....
B5043 0105366 0 0 0 ....
A725471 0105370 0 0 0 ....
BE406627 0105371 0 0 0 ....
이 125 열과 250 개 000 OBS
우리는 두 개의 ID 열이있는 테이블이 테이블을 ID1, ID2 및 다른 열 등록 어떤 변수를 Prov라는 변수를 2003 년에서 2017 년까지 일정 기간에 사용합니다.
내가하려는 것은이 테이블을 변환하여 4 개의 열 (ID1, ID2, Date 또는 period) 및 Prov) 125 대신에. 이런 식으로 뭔가 :
>head(DF)
IDClient IDDossier Date Prov
B416771 0104957 PROV_200110 5
B416771 0104957 PROV_200111 0
B416771 0104957 PROV_200112 99
B416771 0104957 PROV_200212 1,23
H44879 0105289 PROV_200212 36,1
Z353025 0105309 PROV_200312 10436,175
BE4410 0105366 PROV_200406 10438,9
그렇게 할 나는 다음과 같은 코드를 시도하지만,이 소요 정말 시간과 또한 R에서 몇 가지 오류/경고 메시지를 가지고 : 정말 찾기 위해 노력
# N= dim(ProvTab)[1]*dim(ProvTab)[2]
# DF=data.frame(IDClient=rep("",N),IDDossier=rep("",N),
# Date=rep("",N), Prov=rep("",N), stringsAsFactors = F)
DF=NULL
periodd=as.data.frame(colnames(ProvTab))
start.time= Sys.time() # to count running time !
for (k in 3:ncol(ProvTab))
{
for (j in 1:nrow(ProvTab))
{
DF=rbind(DF,
data.frame(IDClient=ProvTab[j,1], IDDossier=ProvTab[j,2],
Date = periodd[k,1] , Prov=ProvTab[j,k]))
}
}
end.time= Sys.time()
end.time- start.time
다른 솔루션이지만 실패했습니다.
추 신 : PS 코드 : R 또는 SQL 코드를 환영합니다!
제안 사항?
멋지다! 전에 함수가 녹아있는 것을 보았지만 잘 이해하지 못했습니다. 정말 고마워 ! –