>

R에서 다음 데이터를 긴 형식으로 가져 오려고합니다.

testdata <- data.frame(rnorm(10),rnorm(10),rnorm(10))
rownames(testdata) <- paste0("ID",1:10) # Ids
colnames(testdata) <- c(2001,2002,2003) # Years
testdata

열 = 시간, 행 = ID. 너무 어려워서는 안되지만 모든 예제에서 다른 방법으로 발견되었습니다. datatable 에서 어떻게 할 수 있습니까  또는 reshape  또는 다른 인기있는 데이터 프레임 패키지에서? 힌트를 주셔서 감사합니다. 데이터를 전치하여 한 가지 방법을 알고 있지만이 목적에는 다소 비효율적 인 방법 인 것 같습니다.

  • 답변 # 1

    아크 런의 의견을 완전한 답으로 바꾸려면 :

    library(data.table)
    melt(setDT(testdata, keep.rownames = TRUE), "rn")
    
    

    와이즈 비즈 와이즈 비즈

  • 답변 # 2

    @Akron의 유용한 답변 :

    "그러나 왜?" 부분 :

    행 이름에 중요한 정보가 있습니다. 일반적으로 중요한 정보를 저장하기에아닙니다. 재구성 할 때 해당 정보가 필요합니다. 그러면 질문은 왜 rn variable value 1: ID1 2001 -0.25265860 2: ID2 2001 0.50538399 3: ID3 2001 0.68216394 4: ID4 2001 0.62203871 5: ID5 2001 0.59297019 6: ID6 2001 0.69383842 7: ID7 2001 1.77900432 8: ID8 2001 -1.69010623 9: ID9 2001 -2.17762905 10: ID10 2001 0.61463127 11: ID1 2002 0.42120060 12: ID2 2002 -0.16148732 ... 입니까?  데이터 프레임이 아닌 매트릭스를 피드하는 경우 해당 정보를 사용합니까?

    그 이유는 reshape2::melt(as.matrix(testdata))  피드는 입력하는 데이터 유형에 따라 메소드 (일명보다 구체적인 함수)를 전달하는 일반 함수입니다. 만약 melt  행렬이고 당신은 melt 를 호출 R은 실제로 m 를 실행합니다. . 반대로, melt(m)  데이터 프레임이고 melt.matrix(m) 를 호출합니다. R은 실제로 df 를 실행합니다. . 이 두 기능- melt(df)  그리고 melt.data.frame(df)  -행 이름을 다르게 처리합니다. 방법 melt.matrix()   melt.data.frame() 메소드는 원하는 방식으로 행 이름을 사용합니다.  하지 않습니다. 따라서 원하는 출력을 얻으려면 데이터 프레임이 아닌 행렬을 melt.matrix 에 공급해야합니다. .

    melt.data.frame 와 같이 data.frame의 열에 ID 정보가 저장된 경우 시연해야합니다.   melt 에서와 같이 행 이름 대신  위), 우리는 testdata2 에 데이터 프레임을 공급하는 측면에서 잘 가고 있습니다. :

    testdata
    
    

  • 답변 # 3

    나에게 확실한 해킹은 데이터 프레임의 행 이름을 다시 일반 열로 늘리는 것 같습니다. 그럼 당신은 melt 중 하나를 사용할 수 있습니다

    testdata2 <- data.frame(
        ID       =  1:10,
        year2001 = rnorm(10),
        year2002 = rnorm(10),
        year2003 = rnorm(10) )
    reshape2::melt(testdata2, "ID")
    reshape2::melt(testdata2, id.vars="ID", measure.vars=2:4) #equivalently, but verbosely
    
    

    (불법 한 동료 이름을 'X2001', 'X2002'로 '고정'했습니다. 정말로 유지하려면 reshape/reshape2/tidyr::gather 를 사용하십시오. )

  • 답변 # 4

    타이어 라이브러리를 사용할 수 있습니다

    > data.frame(ID=rownames(testdata), testdata, row.names=NULL)
         ID      X2001      X2002       X2003
    1   ID1  0.6714540  1.1516917  0.51332801
    2   ID2 -1.7309721 -1.8018835  1.54385452
    3   ID3 -0.4831349 -1.3965915 -0.72819988
    4   ID4  1.2591651  1.2436120  1.01472455
    5   ID5  1.2346326 -1.4587475 -1.75097483
    6   ID6  0.4279562  0.2595588  1.36560258
    7   ID7  0.9990642 -1.0306002 -1.10165672
    8   ID8  1.2118510 -0.3577358 -0.11696953
    9   ID9  0.3074985  0.5177188 -0.09954961
    10 ID10 -1.0418608 -1.8419336 -0.65401215
    
    

    ...check.names=FALSE)

  • 이전 HTML - html - dec를 사용하여 알파벳 숫자를 만듭니다 암호
  • 다음 c - if (ctr % 2)는 무엇을 의미합니까?