#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