Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Copy pasting column values in a dataframe

Tags:

dataframe

r

I have a dataframe that looks something like this:

TRUE    x_value1    x_value2    y_value1    y_value2    x_id    y_id
0           1            4        11             14      1       7
1           2            5        12             15      2       8
0           3            6        13             16      3       9

And I would like to add rows to this data frame and switch x and y, so that in row 4 x_value1=y_value1 and x_id=y_id and y_value1=x_value1...etc.

like this:

 TRUE   x_value1    x_value2    y_value1    y_value2    x_id    y_id
    0           1            4        11             14      1       7
    1           2            5        12             15      2       8
    0           3            6        13             16      3       9
    0           11           14       1              4       7       1
    1           12           15       2              5       8       2
    0           13           16       3              6       9       3

I can do this with for loops, but that takes ages

e.g.

for (i in 1:3)
{ dataframe[i+3,2]<-dataframe[i,4] //for i=1, finds 4th row, column "x_value1" and switches it with first row, column "y_value1"
  dataframe[i+3,3]<-dataframe[i,5]
...etc.
}

The example data frame I have (the first table above):

structure(list(TRUE. = c(0L, 1L, 0L), x_value1 = 1:3, x_value2 = 4:6, 
    y_value1 = 11:13, y_value2 = 14:16, x_id = 1:3, y_id = 7:9), .Names = c("TRUE.", 
"x_value1", "x_value2", "y_value1", "y_value2", "x_id", "y_id"
), row.names = c(NA, 3L), class = "data.frame")

Desired (second table above):

structure(list(TRUE. = c(0L, 1L, 0L), x_value1 = 1:3, x_value2 = 4:6, 
    y_value1 = 11:13, y_value2 = 14:16, x_id = 1:3, y_id = 7:9), .Names = c("TRUE.", 
"x_value1", "x_value2", "y_value1", "y_value2", "x_id", "y_id"
), row.names = c(NA, 3L), class = "data.frame")
like image 806
d12n Avatar asked Dec 05 '25 07:12

d12n


1 Answers

If dd is your original dataframe, then you could try:

dd2 <- cbind(dd[1], dd[4:5], dd[2:3],dd[7:6])

names(dd2) <- names(dd)

dd <- rbind(dd, dd2)
like image 128
FXQuantTrader Avatar answered Dec 06 '25 21:12

FXQuantTrader



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!