简体   繁体   中英

R merging a dataframe with a vector

I have a dataframe df that looks like this:

  indx          adj_coords
1    1    2, 3, 4, 5, 6, 7
2    2   1, 3, 7, 8, 9, 10
3    3 1, 2, 4, 10, 11, 12
4    4 1, 3, 5, 12, 13, 14
5    5 1, 4, 6, 14, 15, 16
6    6 1, 5, 7, 16, 17, 18

I also have a vector vec that looks like this:

vec<-c(1,4,5,3,1)

I would like to get a dataframe of length 5 where each row has the adj_coords of the indx given in vec. It should look something like:

vec adj_coords
1   2, 3, 4, 5, 6, 7
4   1, 3, 5, 12, 13, 14
5   1, 4, 6, 14, 15, 16
3   1, 2, 4, 10, 11, 12
1   2, 3, 4, 5, 6, 7

After that I would like to sample adj_coords so that I have something like:

vec adj_coords              sampled_adj_coords
1   2, 3, 4, 5, 6, 7        3
4   1, 3, 5, 12, 13, 14     5
5   1, 4, 6, 14, 15, 16     14
3   1, 2, 4, 10, 11, 12     11
1   2, 3, 4, 5, 6, 7        6

tried something for you... see if something similar you are looking for...

vec <- c(1,4,5,3,1)
vec <- data.frame("vec"=vec, indx=vec)

df <- structure(list(indx = 1:6, adj_coords = list(2:7, c(1L, 3L, 7L, 8L, 9L, 10L), c(1L, 2L, 4L, 10L, 11L, 12L), c(1L, 3L, 5L, 12L, 13L, 14L), c(1L, 4L, 6L, 14L, 15L, 16L), c(1L, 5L, 7L, 16L, 17L, 18L))), row.names = c(NA, 6L), class = "data.frame")

library(dplyr)
inner_join(vec, df, by = 'indx')

results:

  vec indx          adj_coords
1   1    1    2, 3, 4, 5, 6, 7
2   4    4 1, 3, 5, 12, 13, 14
3   5    5 1, 4, 6, 14, 15, 16
4   3    3 1, 2, 4, 10, 11, 12
5   1    1    2, 3, 4, 5, 6, 7

Just drop the column that is not needed...

Another option:

df <- df[vec,]

Output:

    indx          adj_coords
1      1    2, 3, 4, 5, 6, 7
4      4 1, 3, 5, 12, 13, 14
5      5 1, 4, 6, 14, 15, 16
3      3 1, 2, 4, 10, 11, 12
1.1    1    2, 3, 4, 5, 6, 7

For the random sample you can use this:

df$sampled_adj_coords <- apply(df[-1], 1, function(x) {sample(unlist(x), 1)})

Output:

    indx          adj_coords sampled_adj_coords
1      1    2, 3, 4, 5, 6, 7                  2
4      4 1, 3, 5, 12, 13, 14                 12
5      5 1, 4, 6, 14, 15, 16                  4
3      3 1, 2, 4, 10, 11, 12                  2
1.1    1    2, 3, 4, 5, 6, 7                  3

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM