根据共享值和 R 中的字符串为数据框分配颜色
Assign colors to a data frame based on shared values with a character string in R
我在 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 中的循环,但我还没有改掉这个习惯。
这是我试过的。可能是显而易见的事情,但我只是为所有 newcolors
返回 NA
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 列转换为字符而不是因子使更新更容易。如果名称数量很少,那么单循环应该不会对性能产生太大影响。
我在 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 中的循环,但我还没有改掉这个习惯。
这是我试过的。可能是显而易见的事情,但我只是为所有 newcolors
NA
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 列转换为字符而不是因子使更新更容易。如果名称数量很少,那么单循环应该不会对性能产生太大影响。