R取消堆叠后的名称更改

时间:2013-09-15 11:38:56

标签: r

想象一下,我有以下堆叠数据矩阵:

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列。我怎么能克服这个?

提前致谢。

2 个答案:

答案 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的解决方案虽然更清晰。