Complicated title but here is a simple example of what I am trying to achieve:
d <- data.frame(v1 = c(1,2,3,4,5,6,7,8), v2 = c("A","E","C","B","B","C","A","E")) m <- data.frame(v3 = c("D","E","A","C","D","B"), v4 = c("d","e","a","c","d","b"))
Values in d$v2
should be replaced by values in m$v4
by matching the values from d$v2
in m$v3
The resulting data frame d
should look like:
v1 v4 1 a 2 e 3 c 4 b 5 b 6 c 7 a 8 e
I tried different stuff and the closest I came was: d$v2 <- m$v4[which(m$v3 %in% d$v2)]
I try to avoid any for-loops again! Must be possible :-) somehow... ;)
Pandas DataFrame replace() Method The replace() method replaces the specified value with another specified value. The replace() method searches the entire DataFrame and replaces every case of the specified value.
The data. frame() function works very similarly to cbind() – the only difference is that in data. frame() you specify names to each of the columns as you define them. Again, unlike matrices, dataframes can contain both string vectors and numeric vectors within the same object.
You could try:
merge(d,m, by.x="v2", by.y="v3") v2 v1 v4 1 A 1 a 2 A 7 a 3 B 4 b 4 B 5 b 5 C 3 c 6 C 6 c 7 E 2 e 8 E 8 e
Here is another approach, to preserve the order:
data.frame(v1=d$v1, v4=m[match(d$v2, m$v3), 2]) v1 v4 1 1 a 2 2 e 3 3 c 4 4 b 5 5 b 6 6 c 7 7 a 8 8 e
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With