想象一下,我有以下堆叠数据矩阵:
mY <- data.frame(matrix(c(c(1:10),c("A 1","A 1","A 1","A 1","A 1","B 1","B 1","B 1","B 1","B 1")),10))
导致:
X1 X2
1 1 A 1
2 2 A 1
3 3 A 1
4 4 A 1
5 5 A 1
6 6 B 1
7 7 B 1
8 8 B 1
9 9 B 1
10 10 B 1
这只是我想要取消堆栈的数据框的一个示例,其中X2中的条目包含空格字符。它也可能是“热狗”或“煮鸡蛋”。
当我使用
时mB <- unstack(mY, X1~X2)
我得到了
A.1 B.1
1 1 6
2 2 7
3 3 8
4 4 9
5 5 10
请注意,列的名称已更改为A.1和B.1,之前已将其定义为&#39; A 1&#39;和&#39; B 1&#39;。当我使用mB [&#34; A 1&#34;]时,它返回null,而mB [&#34; A.1&#34;]返回A.1列。我怎么能克服这个?
提前致谢。
答案 0 :(得分:1)
将列名与空格一起使用是个坏主意,但如果你想继续使用它们,这里有一个简单的解决方法。它使用setNames()
将列重命名为unique(mY$X2)
中存储的名称。
setNames(unstack(mY, X1~X2), unique(mY$X2))
# A 1 B 1
# 1 1 6
# 2 2 7
# 3 3 8
# 4 4 9
# 5 5 10
答案 1 :(得分:0)
出于好奇,我检查了这个问题:使用dcast
进行拆分会保留“语法上无效的名称”。
library(reshape2)
# need to create an id variable that is used as 'row variable', LHS in the casting formula
mY$id <- ave(mY$X2, mY$X2, FUN = seq_along)
dcast(data = mY, id ~ X2, value.var = "X1")
# id A 1 B 1
# 1 1 1 6
# 2 2 2 7
# 3 3 3 8
# 4 4 4 9
# 5 5 5 10
@Josh O'Brien的解决方案虽然更清晰。