Объединение строк на основе значений столбца

#r #string #concatenation

#r #строка #объединение

Вопрос:

Как я могу создать новый столбец «desc» на основе значения столбца «num»?

Вот мой исходный набор данных. a, b, c, d, e и f — это имена строк.

введите описание изображения здесь

Вот результат, который я ищу. Обратите внимание, что «desc» состоит из имен строк столбца «num». Имена строк числа 2 — b и d; следовательно, desc числа 2 — «Var : b, d». Имена строк числа 3 — c, e, f; следовательно, desc числа 3 — «Var: c, e, f».

введите описание изображения здесь

Вот код для создания набора данных.

 df <- data.frame(num=c(1, 2, 3, 4, 3, 3))
rownames(df) <- c("a", "b", "c", "d", "e", "f")
  

Ответ №1:

Мы создаем столбец из имен строк ( rownames_to_column ), сгруппированных по ‘num’, создаем ‘desc’, paste используя элементы столбца имен строк (‘rn’)

 library(tidyverse)
df %>% 
  rownames_to_column('rn') %>% 
  group_by(num) %>% 
  transmute(desc = paste0('var: ', toString(rn)))
# A tibble: 6 x 2
# Groups:   num [3]
#    num desc        
#  <dbl> <chr>       
#1     1 var: a      
#2     2 var: b, d   
#3     3 var: c, e, f
#4     2 var: b, d   
#5     3 var: c, e, f
#6     3 var: c, e, f
  

данные

 df <- structure(list(num = c(1, 2, 3, 2, 3, 3)), 
   class = "data.frame", row.names = c("a", 
  "b", "c", "d", "e", "f"))
  

Ответ №2:

 transform(df, desc = ave(row.names(df), df$num, FUN = function(x) toString(x)))
#  num    desc
#a   1       a
#b   2       b
#c   3 c, e, f
#d   4       d
#e   3 c, e, f
#f   3 c, e, f