2016-12-14 10 views
-2

Hello.R функциональное сравнение двух столбцов

Я недавно наткнулся на интересную проблему, где я должен был сделать следующее>

Предположим, что мы имеем два целочисленных столбцов. Для каждого значения в первом я должен проверить, не является ли это значение не таким же, как значение в том же индексе во втором столбце, и если да, добавьте 1 к значению в первом столбце.

Я решил это с помощью цикла for, где я итерировал через индексы и добавил значения соответственно, но поскольку это R, я надеюсь, что есть еще один способ R-ish решить эту проблему. Я думал в строках>

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

но, конечно, это еще не работает. Можно ли это сделать таким образом?

+0

У вас есть только 2 столбца или кадр данных с указанием 6 столбцов, и вам нужно выполнить эту операцию каждые две колонки? – Sotos

ответ

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

+0

спасибо! Я был почти здесь. –

0

You может использовать логическую подмножество следующим образом:

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