Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mutate()或for循环计算另一列中一列的最高当前值_R_Dataframe_For Loop_Dplyr_Mutate - Fatal编程技术网

使用mutate()或for循环计算另一列中一列的最高当前值

使用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

我对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 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]
}
}

df1
df$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]
}
}