我有一个非常简单的问题。如果列Y [n,]不等于列Y [n-1,],我正在尝试将X的值设置为0。我的问题是,我不知道如何引用R中的前一行值,然后使用该值设置另一列的值。
例如:
Y X
1 5
1 1
2 0
2 2
X [3,2]为0,因为Y [3,1]不等于Y [2,1]。
我基本上需要在一个大型数据集中找到它的所有实例,并将相应的X值设置为0。
data$X <- 0 if data$Y[n] =! data$Y[n-1]
在R中有一个简单的解决方案吗?确实感觉应该有。
谢谢
答案 0 :(得分:1)
给予
$config['max_size'] = 10024; // 10mb you can set the value you want
一个选项为Y <- c(1, 1, 2, 2)
X <- c(5, 1, 10, 2)
diff
这个想法是检查x [i]-x [i -1]是否等于零,这给出一个逻辑矢量,我们乘以X * (c(0, diff(Y)) == 0)
# [1] 5 1 0 2
答案 1 :(得分:0)
类似于@markus的帖子,您可以使用dplyr
:
df %>%
mutate(X = (Y == lag(Y, default = first(Y))) * X)
Y X
1 1 5
2 1 1
3 2 0
4 2 2
答案 2 :(得分:0)
另一个base R
选项
with(df, X * c(TRUE, !(Y[-1] - Y[-length(Y)])))
#[1] 5 1 0 2
或使用dplyr
library(dplyr)
df %>%
mutate(X = c(X[1], ((duplicated(Y) * X)[-1])))
# Y X
#1 1 5
#2 1 1
#3 2 0
#4 2 2
df <- structure(list(Y = c(1L, 1L, 2L, 2L), X = c(5L, 1L, 0L, 2L)),
class = "data.frame", row.names = c(NA, -4L))