我有两个不同的对象
列表:
list_color <- c("#f87970", "#c59b04", "#5ab70b", "#04c195", "#06b7eb")数据帧:
head(data)
Cal Cre
1 ca h1
2 cb h2
3 ca h3
4 cd h4
5 ce h5
6 cb h2
7 ca h3
8 cd h4我尝试用与"ca1“列中的每个值对应的颜色创建一个新列
Cal Cre Color
1 ca h1 "#f87970"
2 cb h2 "#c59b04"
3 ca h3 "#f87970"
4 cd h4 "#5ab70b"
5 ce h5 "#04c195"
6 cb h2 "#c59b04"
7 ca h3 "#f87970"
8 cd h4 "#5ab70b"我尝试创建一个双循环,但它不起作用。我的代码:
for(k in list_color){
for(i in data$Ca1){
data$Color <- ifelse(i , k, "None")
}
}发布于 2020-10-04 23:46:17
尝试这种方法,不使用循环和数据帧来标识唯一值,然后分配颜色。该方法使用match()。代码如下:
#Colors
list_color <- c("#f87970", "#c59b04", "#5ab70b", "#04c195", "#06b7eb")
dfcolors <- data.frame(id=1:length(list_color),list_color,stringsAsFactors = F)
#Unique values
uni <- unique(df$Ca1)
dfca1 <- data.frame(id=1:length(uni),uni,stringsAsFactors = F)
#Now match ca1 and colors
dfcolors$ca1 <- dfca1[match(dfcolors$id,dfca1$id),"uni"]
#Match with df
df$Color <- dfcolors[match(df$Ca1,dfcolors$ca1),"list_color"]输出:
df
Ca1 Cre Color
1 ca h1 #f87970
2 cb h2 #c59b04
3 ca h3 #f87970
4 cd h4 #5ab70b
5 ce h5 #04c195使用的一些数据:
#Data
df <- structure(list(Ca1 = c("ca", "cb", "ca", "cd", "ce"), Cre = c("h1",
"h2", "h3", "h4", "h5")), row.names = c("1", "2", "3", "4", "5"
), class = "data.frame")发布于 2020-10-05 03:12:40
我们可以对'Ca1‘的unique值使用match
df$Color <- list_color[match(df$Ca1, unique(df$Ca1))]-output
df
# Ca1 Cre Color
#1 ca h1 #f87970
#2 cb h2 #c59b04
#3 ca h3 #f87970
#4 cd h4 #5ab70b
#5 ce h5 #04c195数据
df <- structure(list(Ca1 = c("ca", "cb", "ca", "cd", "ce"), Cre = c("h1",
"h2", "h3", "h4", "h5")), row.names = c("1", "2", "3", "4", "5"
), class = "data.frame")https://stackoverflow.com/questions/64196437
复制相似问题