【问题标题】:Add a new column to a dataframe based on the matching between another column values and a vector values根据另一列值和向量值之间的匹配向数据框添加新列
【发布时间】:2018-07-25 01:00:27
【问题描述】:

我有一个小数据框:

gene_symbol<-c("DADA","SDAASD","SADDSD","SDADD","ASDAD","XCVXCVX","EQWESDA","DASDADS")
panel<-c("growth","growth","growth","growth","big","big","big","small")
Gene_states22<-data.frame(gene_symbol,panel)

还有一个带颜色的向量:

 colors<-c("red","green","yellow").

我想创建一个这样的数据框:

gene_symbol  panel  color
1        DADA growth    red
2      SDAASD growth    red
3      SADDSD growth    red
4       SDADD growth    red
5       ASDAD    big  green
6     XCVXCVX    big  green
7     EQWESDA    big  green
8     DASDADS  small yellow

简单地说,添加一个新列,其中“增长”匹配“红色”,“大”匹配“绿色”,“小”匹配“黄色”。问题是面板名称每次都不会相同,例如它们可能是“bob”、“sam”、“bill”,并且最多可能有 8 个不同的名称(和颜色)。数据框的行也会有所不同。

【问题讨论】:

  • 您还可以创建一个新的数据框,其列为panelgrowth,然后使用match
  • 同意@RonakShah 和下面的答案。我会阅读 R 中的连接操作,无论是使用包含的 merge 函数还是附加包 - 请参阅这个经典的老问题:How to join (merge) data frames (inner, outer, left, right)? - 了解更多详细信息。
  • BTW colors 在你的情况下是一个向量,而不是一个列表。

标签: r


【解决方案1】:

给你的向量一个名字,然后根据名字提取颜色就很简单了。

names(colors) = c("growth", "big", "small")
Gene_states22$colors = colors[as.character(Gene_states22$panel)]
Gene_states22
#  gene_symbol  panel colors
#1        DADA growth    red
#2      SDAASD growth    red
#3      SADDSD growth    red
#4       SDADD growth    red
#5       ASDAD    big  green
#6     XCVXCVX    big  green
#7     EQWESDA    big  green
#8     DASDADS  small yellow

【讨论】:

  • 谢谢!这涵盖了我。
【解决方案2】:

一种方法:使用两列(面板和颜色)设置第二个数据框,然后将其合并到第一个数据框。这可以在不为第二个数据帧手动输入panel 的情况下完成。例如:

df1 <- data.frame(
    gene  = c("DADA","SDAASD","SADDSD","SDADD","ASDAD","XCVXCVX","EQWESDA","DASDADS"),
    panel = c("growth","growth","growth","growth","big","big","big","small")
)

 colors<-c("red","green","yellow")

 df2 <- cbind(unique(df$panel), colors)

 result <- merge(df1, df2, by="panel")

请确保(或编写更多代码进行检查)您拥有正确数量的颜色以用于唯一数量的 panel 值。

【讨论】:

    【解决方案3】:

    只需创建一个命名的矢量映射面板来着色。

    panel2color <- c(growth='red', big='green', small='yellow')
    Gene_states22[, 'color'] <- panel2color[as.character(Gene_stats22[, 'panel'])]
    

    【讨论】:

      猜你喜欢
      • 2018-12-29
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多