Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.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
R 不计算列中重复值的累积值之和_R_Function_Dplyr_R Markdown_Cumsum - Fatal编程技术网

R 不计算列中重复值的累积值之和

R 不计算列中重复值的累积值之和,r,function,dplyr,r-markdown,cumsum,R,Function,Dplyr,R Markdown,Cumsum,我在R中有这样的数据 x <- c(1,2,2,3,4,4,7,8) y <- c(300,200,200,150,100,100,30,20) df <- data.frame(x, y) 本质上,它不计算y的重复值。我在R怎么做?我尝试过不同的功能,但似乎不起作用。我希望答案是这样的 > Y [1] 300 500 500 650 750 750 780 800 > ans x y Y 1 1 300 300 2 2 200 500 3 2 20

我在R中有这样的数据

x <- c(1,2,2,3,4,4,7,8)
y <- c(300,200,200,150,100,100,30,20)
df <- data.frame(x, y)
本质上,它不计算y的重复值。我在R怎么做?我尝试过不同的功能,但似乎不起作用。我希望答案是这样的

> Y
[1] 300 500 500 650 750 750 780 800
> ans
  x   y   Y
1 1 300 300
2 2 200 500
3 2 200 500
4 3 150 650
5 4 100 750
6 4 100 750
7 7  30 780
8 8  20 800

我们可以获得
不同的
行,执行
求和
,然后执行联接

library(dplyr)
df %>%
    distinct() %>%
    mutate(Y = cumsum(y)) %>%
    right_join(df)
#  x   y   Y
#1 1 300 300
#2 2 200 500
#3 2 200 500
#4 3 150 650
#5 4 100 750
#6 4 100 750
#7 7  30 780
#8 8  20 800

或者不使用任何联接,将“y”中的重复值替换为0,然后执行
cumsum

df %>% 
     mutate(Y =  cumsum(y * !duplicated(y)))
#  x   y   Y
#1 1 300 300
#2 2 200 500
#3 2 200 500
#4 3 150 650
#5 4 100 750
#6 4 100 750
#7 7  30 780
#8 8  20 800

或在
base R

df$Y <- with(df, cumsum(y * !duplicated(y)))

df$Y我们可以得到
distinct
行,进行
cumsum
然后进行连接

library(dplyr)
df %>%
    distinct() %>%
    mutate(Y = cumsum(y)) %>%
    right_join(df)
#  x   y   Y
#1 1 300 300
#2 2 200 500
#3 2 200 500
#4 3 150 650
#5 4 100 750
#6 4 100 750
#7 7  30 780
#8 8  20 800

或者不使用任何联接,将“y”中的重复值替换为0,然后执行
cumsum

df %>% 
     mutate(Y =  cumsum(y * !duplicated(y)))
#  x   y   Y
#1 1 300 300
#2 2 200 500
#3 2 200 500
#4 3 150 650
#5 4 100 750
#6 4 100 750
#7 7  30 780
#8 8  20 800

或在
base R

df$Y <- with(df, cumsum(y * !duplicated(y)))
df$Y