การแปลงข้อมูลใน R

ฉันกำลังมองหาตัวอย่าง R สำหรับการแปลงดาต้าเฟรม ฉันมี dataframe ที่มี 100 แถว (2 แถวต่อรัฐของสหรัฐอเมริกา)

     Status  State Count 
     default    AK   15
     nodefault  AK   71
     default    AL   56
     nodefault  AL  428
     default    AR   33
     nodefault  AR  228
     default    AZ  132
     nodefault  AZ  801
     ......
     ......

การแปลงที่ฉันต้องการคือดาต้าเฟรมที่มี 50 แถว:

      State Count1  Count2 
        AK   15       71
        AL   56      428
        AR   33      228
        AZ  132      801
       .... 

คุณช่วยแนะนำฟังก์ชัน R ใดๆ เพื่อทำการแปลงนี้ได้ไหม?

ฉันพยายามใช้ฟังก์ชัน 'รวม' อย่างไรก็ตาม คาดว่าจะมีพารามิเตอร์เช่น: 'mean' หรือ 'Sum' และฉันไม่ต้องการค่าเฉลี่ยหรือผลรวม

ฉันขอขอบคุณความช่วยเหลือใด ๆ ที่คุณสามารถให้ได้


person Rem    schedule 02.03.2014    source แหล่งที่มา


คำตอบ (2)


ต่อไปนี้เป็นความเป็นไปได้บางประการ:

1) แท็บ x

> xtabs(Count ~ State + Status, DF)
     Status
State default nodefault
   AK      15        71
   AL      56       428
   AR      33       228
   AZ     132       801

2) แตะ

> tapply(DF[[3]], DF[2:1], c)
     Status
State default nodefault
   AK      15        71
   AL      56       428
   AR      33       228
   AZ     132       801

3) ปรับรูปร่างใหม่

> reshape(data = DF, dir = "wide", idvar = "State", timevar = "Status")
  State Count.default Count.nodefault
1    AK            15              71
3    AL            56             428
5    AR            33             228
7    AZ           132             801

dcast ในแพ็คเกจ reshape2 เป็นอีกหนึ่งความเป็นไปได้ที่ทำงานเหมือนกับ reshape

4) read.zoo

> library(zoo)
>
> read.zoo(DF, index = "State", split = "Status", FUN = identity)
   default nodefault
AK      15        71
AL      56       428
AR      33       228
AZ     132       801

5) แยก/รวม

> do.call("merge", c(unname(split(DF, DF$Status)), by = 2))[c(-2, -4)]
  State Count.x Count.y
1    AK      15      71
2    AL      56     428
3    AR      33     228
4    AZ     132     801

สิ่งนี้อาจแสดงเป็น:

s <- split(DF, DF$Status)
merge(s[[1]], s[[2]], by = 2)[c(-2, -4)]

or

with(split(DF, DF$Status), merge(default, nodefault, by = 2))[c(-2, -4)]

เพิ่ม โซลูชัน 5.

person G. Grothendieck    schedule 02.03.2014

ใช้ฟังก์ชัน dcast จากแพ็คเกจ reshape2

require(reshape2)
DB2 <- dcast(DB, State ~ Status, value.var="Count")
colnames(DB2) <- c("State", "Count1", "Count2")
person eclark    schedule 02.03.2014
comment
คุณอาจต้องเปลี่ยนชื่อคอลัมน์ด้วย - person Ben Bolker; 02.03.2014
comment
ถูกต้อง ฉันลืมไป ขอบคุณ! - person eclark; 02.03.2014