gpt4 book ai didi

r - 在不同的行和列上相减并按组分隔

转载 作者:行者123 更新时间:2023-12-04 09:26:36 25 4
gpt4 key购买 nike

我真的很讨厌连续问两个问题,但这是我无法解决的问题。假设我有一个数据框,如下所示:

   df
Row# User Morning Evening Measure Date
1 1 NA NA 2/18/11
2 1 50 115 2/19/11
3 1 85 128 2/20/11
4 1 62 NA 2/25/11
5 1 48 100.8 3/8/11
6 1 19 71 3/9/11
7 1 25 98 3/10/11
8 1 NA 105 3/11/11
9 2 48 105 2/18/11
10 2 28 203 2/19/11
11 2 35 80.99 2/21/11
12 2 91 78.25 2/22/11

在 R 中是否有可能在前一个连续的一天(和 前一天,而不是前一天的结果)1 行的晚上值和每个用户组的不同行的早上值之间的差异?所以我想要的结果就是这样。
   df
Row# User Morning Evening Date Difference
1 1 NA NA 2/18/11 NA
2 1 50 115 2/19/11 NA
3 1 85 129 2/20/11 30
4 1 62 NA 2/25/11 NA
5 1 48 100.8 3/8/11 NA
6 1 19 71 3/9/11 81.8
7 1 25 98 3/10/11 46
8 1 10 105 3/11/11 88
9 2 48 105 2/18/11 NA
10 2 28 203 2/19/11 77
11 2 35 80.99 2/21/11 NA
12 2 91 78.25 2/22/11 -10.01

我想要做的就是从每个用户组的前一天的晚上值中减去早上值。如您所见,我的数据框的某些部分在早上和晚上的列中包含 NA 值,此外,对于每个不同的用户,并非所有日期都按连续顺序排列,因此自然应该分配 NA。

我试过搜索谷歌,但没有太多关于能够将函数应用于不同列上的每组行的不同行的信息(如果有任何意义的话)。

我的尝试包括这方面的许多变体。
df$Difference<-ave((df$Morning,df$Evening),
df$User,
FUN=function(x){
c('NA',diff(df$Evening-df$Morning)),na.rm=T
})

再次,任何帮助将不胜感激。谢谢。

最佳答案

盲目的第一枪(未经测试)。依赖于已按用户和日期排序的数据框。

#if necessary, transform your dates from factor to Date
df$Date <- as.Date(levels(df$Date)[df$Date],format="%m/%d/%y")

df <- within(df,
Difference <- ifelse(c(NA,diff(Measure_Date)) == 1 & diff(User) == 0,
c(NA,head(Evening,-1)) - Morning, NA
)
)

关于r - 在不同的行和列上相减并按组分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15089457/

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