gpt4 book ai didi

r - 如何将一组函数应用于 R data.frame 中分组变量的每组

转载 作者:行者123 更新时间:2023-12-01 19:36:57 25 4
gpt4 key购买 nike

我需要在 R 中一步 reshape data.frame。简而言之,对象值的变化(x1 到 x6)是逐行可见的(从 1990 到 1995):

> tab1[1:10, ] # raw data see plot for tab1
id value year
1 x1 7 1990
2 x1 10 1991
3 x1 11 1992
4 x1 7 1993
5 x1 3 1994
6 x1 1 1995
7 x2 6 1990
8 x2 7 1991
9 x2 9 1992
10 x2 5 1993

我可以一步一步进行 reshape ,有人知道如何一步一步完成吗?

原始数据表 1 - 查看所有时间序列的最小值为“0”

第一步:表 2 - 重新调整每个时间序列,每个的最小值等于“0”。所有时间都落在 x 轴上

第二步:表 3 - 在每个时间轴上应用 diff() 函数。

第三步:表 4 - 在每个时间序列上应用 sort() 函数。

我希望图片足够清晰,以便理解每个步骤。

决赛 table 如下所示:

> tab4[1:10, ]
id value time
1 x1 -4 1
2 x1 -4 2
3 x1 -2 3
4 x1 1 4
5 x1 3 5
6 x2 -4 1
7 x2 -3 2
8 x2 1 3
9 x2 1 4
10 x2 2 5

enter image description here

# Source data:
tab1 <- data.frame(id = rep(c("x1","x2","x3","x4","x5","x6"), each = 6),
value = c(7,10,11,7,3,1,6,7,9,5,2,3,11,9,7,9,1,
0,1,2,2,4,7,4,2,3,1,6,4,2,3,5,4,3,5,6),
year = rep(c(1990:1995), times = 6))

tab2 <- data.frame(id = rep(c("x1","x2","x3","x4","x5","x6"), each = 6),
value = c(6,9,10,6,2,0,4,5,7,3,0,1,11,9,7,9,1,0,
0,1,1,3,6,3,1,2,0,5,3,1,0,2,1,0,2,3),
year = rep(c(1990:1995), times = 6))

tab3 <- data.frame(id = rep(c("x1","x2","x3","x4","x5","x6"), each = 5),
value = c(3,1,-4,-4,-2,1,2,-4,-3,1,-2,-2,2,-8,-1,
1,0,2,3,-3,1,-2,5,-2,-2,2,-1,-1,2,1),
time = rep(c(1:5), times = 6))

tab4 <- data.frame(id = rep(c("x1","x2","x3","x4","x5","x6"), each = 5),
value = c(-4,-4,-2,1,3,-4,-3,1,1,2,-8,-2,-2,-1,2,
-3,0,1,2,3,-2,-2,-2,1,5,-1,-1,1,2,2),
time = rep(c(1:5), times = 6))

最佳答案

使用data.table,这很简单:

require(data.table) ## 1.9.2
ans <- setDT(tab1)[, list(value=diff(value)), by=id] ## aggregation
setkey(ans, id,value)[, time := seq_len(.N), by=id] ## order + add 'time' column

请注意,您的“步骤 1”是不必要的,因为您的第二步是计算差异,并且不会产生任何效果(因此在此处跳过)。

关于r - 如何将一组函数应用于 R data.frame 中分组变量的每组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24761835/

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