您好。
我最近遇到了一个有趣的问题,我必须执行以下操作>
假设我们有两个整数值列。对于第一列中的每个值,我必须检查该值是否与第二列中相同索引处的值不同,如果是,则将1添加到第一列中的值。
我用for循环解决了这个问题,在那里我迭代了索引并相应地添加了值,但是因为这是R,我希望有更多的R-ish方法来解决这个问题。我正在思考>
sapply(column1, function(x) ifelse(x != column2, x+1, x))
但当然,这还不行。这可以这样做吗?
答案 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