根据与 R 中的字符串共享的值将颜色分配给数据框

2024-02-03

我在 R 中工作。我有许多不同的数据框,其中包含样本名称,我尝试根据样本名称为每个数据框中的每一行分配颜色。有许多行具有相同的样本名称,但我的输出数据很混乱,因此无法按样本名称排序。这是我所拥有的一个小例子

names          <- c( "TC3", "102", "172", "136", "142", "143", "AC2G" )
colors         <- c( "darkorange", "forestgreen", "darkolivegreen", "darkgreen", "darksalmon", "firebrick3", "firebrick1" )
dataA          <- c( "JR13-101A", "TC3B", "JR12-136C", "AC2GA", "TC3A" )
newcolors      <- rep( NA, length( dataA ) )
dataA          <- as.data.frame( cbind( dataA, newcolors ) )

我已经尝试了以下操作(我知道有循环,但这就是我所能想到的)。我也试图摆脱 R 中的循环,但我还没有改掉这个习惯。
这是我尝试过的。可能是显而易见的事情,但我只是明白NA返回所有newcolors

for( i in 1:nrow( dataA ) ) {
  for( j in 1:length( names ) ) {
    if( grepl( dataA$dataA[ i ], names[ j ] ) ) {
   dataA$newcolors[ i ]  <- colors[ j ] 
    }
  }
}

这是一个消除 1 个循环的解决方案:

dataA$newcolors<-as.character(dataA$newcolors)
for( j in 1:length( names ) ) {
    dataA$newcolors[grep(names[j], dataA$dataA)] <- colors[j] 
}

将 newcolors 列转换为字符而不是因子使更新更加容易。如果名称数量很短,那么单个循环不会对性能产生太大影响。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据与 R 中的字符串共享的值将颜色分配给数据框 的相关文章

随机推荐