2016-12-14 6 views
-2

Hallo.R Funktionsvergleich von zwei Spalten

ich auf ein interessantes Problem vor kurzem gekommen, wo ich hatte die folgende>

Angenommen, wir haben zwei Integer-Wert von Spalten zu tun. Für jeden Wert in der ersten muss ich prüfen, ob dieser Wert nicht mit dem Wert des gleichen Index in der zweiten Spalte übereinstimmt, und wenn ja, addiere 1 zum Wert in der ersten Spalte.

Ich löste dies mit einer for-Schleife, wo ich durch Indizes und addierte Werte entsprechend iterierte, aber da dies R ist, hoffe ich, es gibt etwas mehr R-Weg, um dies zu lösen. Ich dachte in den Zeilen>

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

aber natürlich funktioniert das noch nicht. Kann dies so gemacht werden?

+0

haben Sie nur 2 Spalten oder einen Datenrahmen mit sagen 6 Spalten und Sie müssen diese Operation alle zwei Spalten tun? – Sotos

Antwort

0

Dies scheint zu funktionieren:

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)

Beispieldaten sieht aus, als dies in einer Tabelle: a b 1 1 1 2 2 3 3 3 3 4 4 4 5 5 4

nach dem Ausführen des obigen Code sieht es so aus: a b 1 1 1 2 3 3 3 3 3 4 4 4 5 6 4

+0

danke! Ich war fast hier. –

0

Sie kann eine logische Teilmenge wie folgt verwenden:

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 
Verwandte Themen