Как использовать индексы столбцов для сбора значений из столбцов в R - PullRequest
4 голосов
/ 27 марта 2020
x y z column_indices 
6 7 1      1,2
5 4 2       3
1 3 2      1,3

У меня есть индексы столбцов значений, которые я хотел бы собрать в отдельный столбец, например, то, что я хочу создать, выглядит примерно так:

x y z column_indices values
6 7 1      1,2        6,7
5 4 2       3          2
1 3 2      1,3        1,2

Какой самый простой способ сделать это в R?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 27 марта 2020

Одно решение с участием dplyr и tidyr может быть:

df %>%
 pivot_longer(-column_indices) %>%
 group_by(column_indices) %>%
 mutate(values = toString(value[1:n() %in% unlist(strsplit(column_indices, ","))])) %>%
 pivot_wider(names_from = "name", values_from = "value")

  column_indices values     x     y     z
  <chr>          <chr>  <int> <int> <int>
1 1,2            6, 7       6     7     1
2 3              2          5     4     2
3 1,3            1, 2       1     3     2
2 голосов
/ 27 марта 2020

В базе R мы можем использовать apply, разделить column_indices на ',', преобразовать их в целое и получить соответствующее значение из строки.

df$values <- apply(df, 1, function(x) {
   inds <- as.integer(strsplit(x[4], ',')[[1]])
   toString(x[inds])
})

df
#  x y z column_indices values
#1 6 7 1            1,2   6, 7
#2 5 4 2              3      2
#3 1 3 2            1,3   1, 2

данные

df <- structure(list(x = c(6L, 5L, 1L), y = c(7L, 4L, 3L), z = c(1L, 
2L, 2L), column_indices = structure(c(1L, 3L, 2L), .Label = c("1,2", 
"1,3", "3"), class = "factor")), class = "data.frame", row.names = c(NA, -3L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...