首页 > 解决方案 > 连接 R 中的列

问题描述

我的数据集有两列(REF 和 COLOR)。

数据集

> dput(dataset)
structure(list(REF = structure(c(3L, 5L, 3L, 1L, 3L, 3L, 3L, 
4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L), .Label = c("BRE", "GAB", 
"HID", "RIU", "UNK"), class = "factor"), COLOR = structure(c(3L, 
2L, 3L, 4L, 3L, 3L, 3L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 5L
), .Label = c("#01665e", "#4d4d4d", "#80cdc1", "#bf812d", "#f6e8c3"
), class = "factor")), class = "data.frame", row.names = c(NA, 
-17L))
> 

如何从其他列创建如下所示的颜色列?

   REF_COLOR

"BIF" = "#543005",
"BRE" = "#bf812d",
"DIA" = "#dfc27d",
"GAB" = "#f6e8c3",
"GRA" = "#f5f5f5",
"GRN" = "#c7eae5",
"HID" = "#80cdc1",
"RIO" = "#35978f",
"RIU" = "#01665e",
"RVB" = "#003c30",
"RVU" = "#8e0152",
"SAP" = "#276419",
"SOL" = "#2d004b",
"UNK" = "#4d4d4d"

到目前为止,我取得的最大成就是:

> paste(ref, color, sep=" = ")
[1] "HID = #80cdc1", "UNK = #4d4d4d", "BRE = #bf812d", "RIU = #01665e", "GAB = #f6e8c3"

标签: r

解决方案


这并不像看起来那么简单,需要不止一个操作:

在这里,我先进行双重粘贴,然后进行双重替换:

REF_COLOR <- paste(sub('^|$', '"', 
                       gsub(', ', '", "', 
                            paste0(paste0(df$REF,'" = "', df$COLOR, sep = ""), collapse = ", "))), '"', sep = "")

结果:

REF_COLOR
[1] "\"HID\" = \"#80cdc1\", \"UNK\" = \"#4d4d4d\", \"HID\" = \"#80cdc1\", \"BRE\" = \"#bf812d\", \"HID\" = \"#80cdc1\", \"HID\" = \"#80cdc1\", \"HID\" = \"#80cdc1\", \"RIU\" = \"#01665e\", \"HID\" = \"#80cdc1\", \"HID\" = \"#80cdc1\", \"HID\" = \"#80cdc1\", \"HID\" = \"#80cdc1\", \"HID\" = \"#80cdc1\", \"HID\" = \"#80cdc1\", \"HID\" = \"#80cdc1\", \"HID\" = \"#80cdc1\", \"GAB\" = \"#f6e8c3"

正如@Mr.Flick 所指出的,要查看未转义的值,请使用cat

cat(REF_COLOR)
"HID" = "#80cdc1", "UNK" = "#4d4d4d", "HID" = "#80cdc1", "BRE" = "#bf812d", "HID" = "#80cdc1", "HID" = "#80cdc1", "HID" = "#80cdc1", "RIU" = "#01665e", "HID" = "#80cdc1", "HID" = "#80cdc1", "HID" = "#80cdc1", "HID" = "#80cdc1", "HID" = "#80cdc1", "HID" = "#80cdc1", "HID" = "#80cdc1", "HID" = "#80cdc1", "GAB" = "#f6e8c3"

推荐阅读