gpt4 book ai didi

r - ddply : how to include a character vector in result

转载 作者:行者123 更新时间:2023-12-04 21:23:03 26 4
gpt4 key购买 nike

抱歉,对于这个神秘的标题,我没有找到更好的总结来解决我的问题。所以这是我的问题:我有一个数据框并且想要制作 diff()在工作正常的组上:

 df <- data.frame (name = rep(c("a", "b", "c"), 4),
index = rep(c("c1", "c2"), each=6),
year = rep(c(2008:2010),4),
value = rep(1:3, each=4))

head(df)

name index year value

1 a c1 2008 1
2 b c1 2009 1
3 c c1 2010 1

ddply(df, .(name, year), summarize, value=diff(value))

但是,我想包括 index在我的结果中,我试图这样做:
ddply(df, .(name, year), summarize,  value=diff(value), index=index)

然而,这会产生错误消息:
length(rows) == 1 is not TRUE

我猜这是因为索引有更多行,因为它没有被 diff 处理。 .我的问题有快速解决方案吗?

非常感谢!

编辑

我试图澄清我的问题,我想添加到结果中:

假设变量 index以上。这是一个应该解释一些事情的因素。然而,我不能接受 diff()它没有任何意义,所以我只想通过这个而不改变任何东西。我试过 drop==FALSE这确实产生了相同的错误消息。

抱歉所有这些困惑!这是一个非常简单的例子:
name year  index  value
a 2008 c1 10
a 2009 c2 30
a 2010 c1 40

在获取 diff 的 acroos 组“a”后,这看起来像:
name year index d.value 
a 2009 c2 +20 #c2 stayed the same just the first row got intentionally dropped.
a 2010 c1 +10

想想这个不幸的名字 index作为属性之类的东西:它会随着时间的推移而改变,但采用 diff() 没有意义。

我真的真的希望这能给你一个我想要什么的线索 - 如果没有,我会删除这个问题,因为我发现了一个不优雅的解决方法 ;) 并对所有的不便表示抱歉!

最佳答案

我不完全确定你想要什么,听起来你想要获得差异,保持索引变量并删除每个分组的第一行。这能得到你想要的吗?

doSummary = function(df) {
values = diff(df$value)
indexes = df$index[2:length(df)]
data.frame(d.value=values, index=indexes)
}
ddply(df, .(name, year), doSummary)

关于r - ddply : how to include a character vector in result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8755291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com