Комбинирование значений столбца с именами столбцов, используя tidyr объединиться
У меня есть data.frame
с несколькими столбцами:
set.seed(1)
df <- data.frame(cluster=LETTERS[1:4],group=c(rep("m",2),rep("f",2)),point=rnorm(4),err=runif(4,0.1,0.3))
И я бы добавил еще одну колонку, которая "n"
concatenates
все столбцы соответствующей строки, где имя столбца предшествует значению.
Я знаю это:
library(tidyr)
library(dplyr)
tidyr::unite(df,text,sep="n")
Дает мне это tibble
:
text
1 Anmn0.487429052428485n0.286941046221182
2 Bnmn0.738324705129217n0.142428504256532
3 Cnfn0.575781351653492n0.230334753217176
4 Dnfn-0.305388387156356n0.125111019192263
Но я хочу вот чего tibble
:
text
1 cluster: Angroup: mnpoint: 0.487429052428485nerr: 0.286941046221182
2 cluster: Bngroup: mnpoint: 0.738324705129217nerr: 0.142428504256532
3 cluster: Cngroup: fnpoint: 0.575781351653492nerr: 0.230334753217176
4 cluster: Dngroup: fnpoint: -0.305388387156356nerr: 0.125111019192263
Есть идеи?
1 ответ:
Мы можем использовать
Map
сdo.call
data.frame(text = do.call(paste, c(Map(function(x, y) paste(x, y, sep=": "), names(df), df), sep="\n")))
Или используя
tidyverse
, сопоставьте столбцы (imap
- предоставляет.y
в качестве имен столбцов), а затем выполнитеunite
library(tidyverse) imap(df, ~ paste(.y, .x, sep=": ")) %>% as_tibble %>% unite(text, sep="\n") # A tibble: 4 x 1 # text # <chr> #1 "cluster: A\ngroup: m\npoint: -0.626453810742332\nerr: 0.225822808779776" #2 "cluster: B\ngroup: m\npoint: 0.183643324222082\nerr: 0.112357254093513" #3 "cluster: C\ngroup: f\npoint: -0.835628612410047\nerr: 0.14119491497986" #4 "cluster: D\ngroup: f\npoint: 1.59528080213779\nerr: 0.135311350505799"