在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
将它们转换为数值。