R中的数据转换

Rem*_*Rem 3 r transform

我正在寻找一个R转换数据帧的例子.我有一个100行的数据帧(每个US状态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
     ......
     ......
Run Code Online (Sandbox Code Playgroud)

我想要的转换是一个包含50行的数据框:

      State Count1  Count2 
        AK   15       71
        AL   56      428
        AR   33      228
        AZ  132      801
       .... 
Run Code Online (Sandbox Code Playgroud)

你能建议任何R函数进行这种转换吗?

我试图使用'聚合'功能.但是,它需要一个参数,例如:'mean'OR'Sum',我不想要均值或求和.

我感谢您提供的任何帮助.

G. *_*eck 5

以下是一些可能性:

1)xtabs

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

2)tapply

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

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

这也可以表示为:

s <- split(DF, DF$Status)
merge(s[[1]], s[[2]], by = 2)[c(-2, -4)]
Run Code Online (Sandbox Code Playgroud)

要么

with(split(DF, DF$Status), merge(default, nodefault, by = 2))[c(-2, -4)]
Run Code Online (Sandbox Code Playgroud)

添加解决方案5.