我很不确定如何正确地给这个问题命名!
假设我有一个数据框d:
当前数据框:
d <- data.frame(sample = LETTERS[1:2], cat = letters[11:20], count = c(1:10))
sample cat count
1 A k 1
2 B l 2
3 A m 3
4 B n 4
5 A o 5
6 B p 6
7 A q 7
8 B r 8
9 A s 9
10 B t 10
我正在尝试重新排列数据,使每个猫的值成为一个单独的列,样本仍然是一列(或成为行名称),计数将是新猫列中的值,在样本没有猫计数时为0。如下所示:
期望的数据框布局:
sample k l m n o p q r s t
1 A 1 0 3 0 5 0 7 0 9 0
2 B 0 2 0 4 0 6 0 8 0 10
这个问题有什么最好的解决方法?
我已经做到了这一步:
for (i in unique(d$sample)) {
s <- d[d$sample==i,]
st <- as.data.frame(t(s[,3]))
colnames(st) <- s$cat
rownames(st) <- i
}
即循环遍历原始数据框中的样本,并为每个样本子集转置。因此,在这种情况下,我得到
k m o q s
A 1 3 5 7 9
并且
l n p r t
B 2 4 6 8 10
我卡在这里了。我尝试了许多用 merge
, bind
, apply
等方法,但是似乎都找不到正确的方法。另外,我不禁想知道上面那个循环是否完全必要 - 也许可以用 unstack
实现?
无需多言,我是R新手... 如果有人能帮我解决这个问题,我将非常感激!
PS 我试图重新排列数据框以便使值的绘制更加容易(即我想在表格格式的图中显示实际数据框)。
谢谢!