首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在基于列表的多条件数据框和数据框中添加新列

在基于列表的多条件数据框和数据框中添加新列
EN

Stack Overflow用户
提问于 2020-10-04 23:20:54
回答 2查看 32关注 0票数 1

我有两个不同的对象

列表:

代码语言:javascript
运行
复制
list_color <- c("#f87970", "#c59b04", "#5ab70b", "#04c195", "#06b7eb")

数据帧:

代码语言:javascript
运行
复制
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“列中的每个值对应的颜色创建一个新列

代码语言:javascript
运行
复制
      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"

我尝试创建一个双循环,但它不起作用。我的代码:

代码语言:javascript
运行
复制
for(k in list_color){
    for(i in data$Ca1){
       data$Color <- ifelse(i , k, "None")
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-04 23:46:17

尝试这种方法,不使用循环和数据帧来标识唯一值,然后分配颜色。该方法使用match()。代码如下:

代码语言:javascript
运行
复制
#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"]

输出:

代码语言:javascript
运行
复制
df
  Ca1 Cre   Color
1  ca  h1 #f87970
2  cb  h2 #c59b04
3  ca  h3 #f87970
4  cd  h4 #5ab70b
5  ce  h5 #04c195

使用的一些数据:

代码语言:javascript
运行
复制
#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")
票数 1
EN

Stack Overflow用户

发布于 2020-10-05 03:12:40

我们可以对'Ca1‘的unique值使用match

代码语言:javascript
运行
复制
df$Color <- list_color[match(df$Ca1, unique(df$Ca1))]

-output

代码语言:javascript
运行
复制
df
#  Ca1 Cre   Color
#1  ca  h1 #f87970
#2  cb  h2 #c59b04
#3  ca  h3 #f87970
#4  cd  h4 #5ab70b
#5  ce  h5 #04c195

数据

代码语言:javascript
运行
复制
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")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64196437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档