【问题标题】:Use of cast in the reshape package.在 reshape 包中使用 cast。
【发布时间】:2012-06-19 17:48:39
【问题描述】:

我正在尝试使用“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

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

【问题讨论】:

  • 通过添加value2 列,您的数据将不再熔化。你需要重新melt,然后subset。请参阅my answer 中的“更新”部分了解我的意思。
  • 你说的很对。我做了融化,然后根据原始值添加了 1/0 的附加值列。当我今晚晚些时候有机会时,我会看看答案并解决它。感谢您的回复。
  • 供您参考,来自reshape2dcast 似乎以您拥有的方式处理数据。 dcast(D, grp ~ ., mean) 工作正常,dcast(D, grp ~ ., value.var="value2", mean) 也是如此。
  • 谢谢,你会推荐 reshape2 而不是 reshape 吗?其他方面的一般功能是否几乎相同(例如融化)
  • 大部分功能似乎都是一样的,我认为(但找不到来源来验证这一点)reshape2 被视为reshape 的继任者,但reshape被保留是因为它有一些不同的功能。 The initial announcementreshape2 包中提到 此版本以牺牲功能为代价提高速度,因此我将其重命名为 reshape2 以避免给现有用户带来问题。根据用户反馈,我可能会重新引入其中一些功能。

标签: r casting reshape


【解决方案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")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. 否则,猜测最后一列是值列

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2023-04-09
    • 2013-12-07
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多