使用mutate()或for循环计算另一列中一列的最高当前值
我对R和数据争论都很陌生,所以如果这是一个愚蠢的问题,我道歉。我只是还没弄明白 因此,我有一个大的数据框架,其中包含多个个体在不同时间的许多观察结果。 下面是一个非常简单的示例:使用mutate()或for循环计算另一列中一列的最高当前值,r,dataframe,for-loop,dplyr,mutate,R,Dataframe,For Loop,Dplyr,Mutate,我对R和数据争论都很陌生,所以如果这是一个愚蠢的问题,我道歉。我只是还没弄明白 因此,我有一个大的数据框架,其中包含多个个体在不同时间的许多观察结果。 下面是一个非常简单的示例: x <- c(11,10,12,10,10,8,13,11,14) y <- 0 df <- data.frame(id,x,y) > df id x y 1 1 11 0 2 1 10 0 3 1 12 0 4 2 10 0 5 2 10 0 6 2 8 0 7 3 13
x <- c(11,10,12,10,10,8,13,11,14)
y <- 0
df <- data.frame(id,x,y)
> df
id x y
1 1 11 0
2 1 10 0
3 1 12 0
4 2 10 0
5 2 10 0
6 2 8 0
7 3 13 0
8 3 11 0
9 3 14 0
我试着使用dplyr
中的mutate()
,但效果不太好:基本上,除了第一个值是NA外,x的值对y重复
df %>%
+ group_by(id) %>%
+ mutate(y = if_else(x>= lag(y)
+ , x
+ , lag(y))
+ )
# A tibble: 9 x 3
# Groups: id [3]
id x y
<dbl> <dbl> <dbl>
1 1 11 NA
2 1 10 10
3 1 12 12
4 2 10 NA
5 2 10 10
6 2 8 8
7 3 13 NA
8 3 11 11
9 3 14 14
df%>%
+分组依据(id)%>%
+突变(y=if_else(x>=lag(y)
+,x
+,滞后(y))
+ )
#一个tibble:9x3
#组别:id[3]
id x y
111NA
2 1 10 10
3 1 12 12
4 2 10 NA
5 2 10 10
6 2 8 8
7 3 13 NA
8 3 11 11
9 3 14 14
然后我尝试为它创建一个for循环,但问题是每次我都需要手动更改id
df1 <- df[df$id==1,]
for (i in 2:length(df1$x))
{ df1$y[1]<- df1$x[1]
if (df1$x[i] >= df1$y[i-1])
{
df1$y[i] <- df1$x[i]
} else
{
df1$y[i] <- df1$y[i-1]
}
}
df1df$y=cummax(df$x)
@dww谢谢!建议的答案有效。我不知道如何用正确的词来寻找它。
df1 <- df[df$id==1,]
for (i in 2:length(df1$x))
{ df1$y[1]<- df1$x[1]
if (df1$x[i] >= df1$y[i-1])
{
df1$y[i] <- df1$x[i]
} else
{
df1$y[i] <- df1$y[i-1]
}
}