参考data.frame

时间:2019-05-29 22:07:05

标签: r matrix reference row

我有一个非常简单的问题。如果列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中有一个简单的解决方案吗?确实感觉应该有。

谢谢

3 个答案:

答案 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))