在R中以不同的方式制表
这个问题与 从以下数据框:在R中以不同的方式制表,r,R,这个问题与 从以下数据框: > ddf aa bb 1 c efg 2 d cde 3 d abc 4 c abc 5 b efg 6 b cde 7 c abc 8 c abc 9 c cde 10 b cde > > > dput(ddf) structure(list(aa = structure(c(2L, 3L, 3L, 2L, 1L, 1L, 2L, 2L, 2L, 1L), .Label = c("b",
> ddf
aa bb
1 c efg
2 d cde
3 d abc
4 c abc
5 b efg
6 b cde
7 c abc
8 c abc
9 c cde
10 b cde
>
>
> dput(ddf)
structure(list(aa = structure(c(2L, 3L, 3L, 2L, 1L, 1L, 2L, 2L,
2L, 1L), .Label = c("b", "c", "d"), class = "factor"), bb = structure(c(3L,
2L, 1L, 1L, 3L, 2L, 1L, 1L, 2L, 2L), .Label = c("abc", "cde",
"efg"), class = "factor")), .Names = c("aa", "bb"), row.names = c(NA,
-10L), class = "data.frame")
我可以把它分类:
> ddf[order(ddf$bb),]
aa bb
3 d abc
4 c abc
7 c abc
8 c abc
2 d cde
6 b cde
9 c cde
10 b cde
1 c efg
5 b efg
我可以像下面这样制表:
> t(with(ddf, table(aa,bb)))
aa
bb b c d
abc 0 3 1
cde 2 1 1
efg 1 1 0
abc c c c d
cde b b c d
eft b c
但我希望有如下输出:
> t(with(ddf, table(aa,bb)))
aa
bb b c d
abc 0 3 1
cde 2 1 1
efg 1 1 0
abc c c c d
cde b b c d
eft b c
我试过:
ll = list()
for(xx in unique(ddf$bb)) {
ll[[length(ll)+1]] = xx
ll[[length(ll)+1]] = ddf[ddf$bb==xx,]$aa
}
ll
[[1]]
[1] "efg"
[[2]]
[1] c b
Levels: b c d
[[3]]
[1] "cde"
[[4]]
[1] d b c b
Levels: b c d
[[5]]
[1] "abc"
[[6]]
[1] d c c c
Levels: b c d
但我无法将这些组合在一起以获得如下输出:
abc c c c d
cde b b c d
eft b c
b、c、d等应如上所示进行分类。谢谢你的帮助
编辑:
它与@Richard Scriven提供的答案一致:
> aggregate(aa ~ bb, ddf, function(x) paste(sort(x)))
bb aa
1 abc c, c, c, d
2 cde b, b, c, d
3 efg b, c
但为什么下面(我之前试过)只给出数字呢
> aggregate(aa ~ bb, ddf, function(x) sort(x))
bb aa
1 abc 2, 2, 2, 3
2 cde 1, 1, 2, 3
3 efg 1, 2
您可以使用带有匿名函数的
aggregate
对值进行排序
,然后粘贴
aggregate(aa ~ bb, ddf, function(x) paste(sort(x), collapse = " "))
# bb aa
# 1 abc c c c d
# 2 cde b b c d
# 3 efg b c
是的,它有效!你能澄清一下我在上面的问题中添加的一点吗?这是因为
aa
是一个因子变量,因此sort
将它们转换为数值。