2

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

我已经将一个数据框融合为长格式,其中包含我的所有因子和一个取值 0、1、2、3、4 的单个数值变量。然后,我创建了第二个值为 0,1 的值列来细化原始值列。当我尝试聚合时,只要它是原始值列,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

如果这是不可能的,那么我将不得不操纵我的数据。

4

1 回答 1

1

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

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

例如,尽量不要在变量名称中使用“值”一词names(D)[4:5] = c("one", "two"),然后使用cast(D, grp ~ ., mean, value="one")andcast(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. 否则,猜测最后一列是值列

但是,在我完成的少数测试中,我没有看到任何方法可以在value=不重命名变量或重新融合数据的情况下成功指定参数。

于 2012-06-17T15:47:31.347 回答