两列的R功能比较

时间:2016-12-14 14:00:08

标签: r sapply

您好。

我最近遇到了一个有趣的问题,我必须执行以下操作>

假设我们有两个整数值列。对于第一列中的每个值,我必须检查该值是否与第二列中相同索引处的值不同,如果是,则将1添加到第一列中的值。

我用for循环解决了这个问题,在那里我迭代了索引并相应地添加了值,但是因为这是R,我希望有更多的R-ish方法来解决这个问题。我正在思考>

sapply(column1, function(x) ifelse(x != column2, x+1, x))

但当然,这还不行。这可以这样做吗?

2 个答案:

答案 0 :(得分:0)

这似乎有效:

df <- data.frame(a = c(1,2,3,4,5), b = c(1,3,3,4,4)) df$a <- ifelse(df$a != df$b, df$a+1, df$a)

示例数据在表格中如下所示: a b 1 1 1 2 2 3 3 3 3 4 4 4 5 5 4

运行上面的代码后,它看起来像这样: a b 1 1 1 2 3 3 3 3 3 4 4 4 5 6 4

答案 1 :(得分:0)

您可以像这样使用逻辑子集:

set.seed(123)
x <- sample(1:100, 25)
y <- sample(1:100, 25)


x[3] <- 10
y[3] <- 10

x.orig <- x
x[x != y] <- x[x != y] +1

cbind(y, x.orig, x)

#      y x.orig  x
# [1,] 71     29 30
# [2,] 54     79 80
# [3,] 10     10 10
# [4,] 29     86 87
# [5,] 15     91 92
# [6,] 92      5  6
# [7,] 85     50 51
# [8,] 65     83 84
# [9,] 74     51 52
# [10,]  3     42 43
# [11,] 44     87 88
# [12,] 68     98 99
# [13,] 20     60 61
# [14,] 28     94 95
# [15,] 88      9 10
# [16,] 13     77 78
# [17,] 35     21 22
# [18,] 84      4  5
# [19,] 31     27 28
# [20,] 94     78 79
# [21,] 12     72 73
# [22,] 19     55 56
# [23,] 37     90 91
# [24,] 21     85 86
# [25,] 66     81 82