在重塑包装中使用铸造。

时间:2012-06-17 12:32:33

标签: r casting reshape

我正在尝试使用“value =”参数。它没有做我想要的。 下面的示例以更简单的格式复制问题。我想知道“value =”参数是什么。

我将数据帧融合成长格式,包含所有因子和单个数值变量,取值为0,1,2,3,4。然后,我创建了一个带有0,1的第二个值列,以优化原始值列。 只要它是ORIGINAL值列,当我尝试聚合时,Cast就会成为一种享受。

D = data.frame(id = 1:10,
           grp = rep(c("A","B"),5),
           variable = "var",
           value = rnorm(10,0,1),
           value2 = rnorm(10,10,2))

cast(D, grp~., mean)                    #works fine
cast(D, grp~., value = "value2", mean)  #does not work

如果无法做到这一点,那么我将不得不操纵我的数据。

1 个答案:

答案 0 :(得分:1)

我不确定,但我认为这是因为cast中的以下代码:

if (any(names(data) == value)) 
names(data)[names(data) == value] <- "value"

请勿在变量名称中使用“value”一词,例如names(D)[4:5] = c("one", "two"),然后使用cast(D, grp ~ ., mean, value="one")cast(D, grp ~ ., mean, value="two")来获取您正在寻找的结果。

更新

从技术上讲,您的数据并非完全“熔化”。请参阅下面的示例,了解如何正确处理此问题。它主要涉及再次“融化”您的数据并使用subset(我已将“value”和“value2”更改为更容易看到正在发生的事情的值。)

D = data.frame(id = 1:10,
               grp = rep(c("A","B"),5),
               variable = "var",
               value = rep(c(1, 2), 5),
               value2 = rep(c(3, 4), 5))
D2 = melt(D, id.vars=1:2, measure.vars=4:5)
cast(D2, grp ~ ., mean, subset=variable=="value")
#   grp (all)
# 1   A     1
# 2   B     2
cast(D2, grp ~ ., mean, subset=variable=="value2")
#   grp (all)
# 1   A     3
# 2   B     4

更新2

似乎任何时候都有一个名为value的变量,即使你为cast参数指定另一个变量,它始终是value=使用的变量。 guess_valuecast使用的)帮助文件的“策略”部分描述了以下两个步骤:

  1. 是否存在值或(所有)列?如果是这样,请使用
  2. 否则,猜猜最​​后一列是值列
  3. 但是,在我完成的一些测试中,我没有看到任何方法在没有重命名变量或重新融化数据的情况下成功指定value=参数。