我正在寻找一个用于转换数据框的 R 示例。 我有一个包含 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' OR 'Sum',我不想要 mean 或 sum。
感谢您提供的任何帮助。
最佳答案
这里有几种可能性:
1) xtabs
> 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
> 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
reshape2 包中的 dcast
是另一种可能的工作方式,有点像 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)]
或
with(split(DF, DF$Status), merge(default, nodefault, by = 2))[c(-2, -4)]
添加解决方案 5.
关于r - R中的数据转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22131069/