R - 使用变量中的值有条件地从其他变量中选择多个值

用户5449910

我正在尝试比较 3D CIELuv 颜色空间中的颜色,并且我想确定最接近我感兴趣的主要颜色的颜色的 L、U 和 V 值。我已经计算了每种源颜色(由每个颜色的三个坐标 L、U 和 V 表示)和原色(我也有 LUV 坐标,空间未显示)之间的欧几里得距离。每种颜色与原色之间的距离存储在三个DistCol变量中。然后我使用df$Min.Dist <- colnames(df[c(10:12)])[unlist(apply(df[c(10:12)], 1, which.min))]. 例子:

  Colour1L Colour1U Colour1V Colour2L Colour2U Colour2V Colour3L Colour3U Colour3V DistCol1 DistCol2 DistCol3 Min.Dist
1     25.5      9.0    -54.5     98.8      0.0     -1.6     63.9     55.0     60.2     25.4     82.1    137.8 DistCol1
2      8.7     14.8      5.6     41.7    133.2     27.6     41.7    133.2     27.6    144.2     58.3    133.3 DistCol2
3     83.2     24.7    -42.7     21.6     -0.4      0.8     83.2     24.7    -42.7     12.1    170.6    102.3 DistCol1
4     55.0    -49.8     62.5     99.2      0.1     -1.8     55.0    -49.8     62.5    213.7    103.4     67.7 DistCol3

我想使用Min.Dist变量(或任何其他方法,如果有更好的方法!)有条件地选择最接近的颜色的所有三个 L、u 和 v 值。也就是说,在第一行中,Min.Distis DistCol1,因此三个Source值都来自三Colour1列。理想情况下,我的最终输出如下所示:

  Colour1L Colour1U Colour1V Colour2L Colour2U Colour2V Colour3L Colour3U Colour3V DistCol1 DistCol2 DistCol3 Min.Dist SourceL SourceU SourceV
1     25.5      9.0    -54.5     98.8      0.0     -1.6     63.9     55.0     60.2     25.4     82.1    137.8 DistCol1    25.5     9.0   -54.5
2      8.7     14.8      5.6     41.7    133.2     27.6     41.7    133.2     27.6    144.2     58.3    133.3 DistCol2    41.7   133.2    27.6
3     83.2     24.7    -42.7     21.6     -0.4      0.8     83.2     24.7    -42.7     12.1    170.6    102.3 DistCol1    83.2    24.7   -42.7
4     55.0    -49.8     62.5     99.2      0.1     -1.8     55.0    -49.8     62.5    213.7    103.4     67.7 DistCol3    55.0   -49.8    62.5

我以前使用ifelseL、U 和 V 维度中的每一个的长嵌套表达式获得了类似的结果,例如,df$SourceL <- ifelse(df$Min.Dist =="DistCol1", Colour1L, ifelse(df$Min.Dist == "DistCol2", Colour2L, ifelse(...但我正在处理真实数据中的 8-10 种颜色,这非常乏味且容易出错。

如果这个问题已经在其他地方得到回答,我深表歉意,并且非常感谢对此资源的任何建议或指导。也感谢在此论坛上回答问题的每个人 - 在过去几个月中,您的建议对于解决许多 R 问题非常宝贵!

心理

使用基 R 以非矢量化方式执行此操作:

  1. 重建你的 data.frame:

    df <- data.frame(c(25.5,8.7,83.2,55),c(9,14.8,24.7,-49.8),c(-54.5,5.6,-42.7,62.5), c(98.8,41.7,21.6,99.2),c(0,133.2,-0.4,0.1),c(-1.6,27.6,0.8,-1.8),c(63.9,41.7,83.2,55),c(55,133.2,24.7,-49.8),c(60.2,27.6,-42.7,62.5),c(25.4,144.2,12.1,213.7),c(82.1,58.3,170.6,103.4),c(137.8,133.3,102.3,67.7),c("DistCol1","DistCol2","DistCol1","DistCol3"))
    colnames(df) <- c("Colour1L", "Colour1U", "Colour1V", "Colour2L", "Colour2U",  "Colour2V", "Colour3L", "Colour3U", "Colour3V", "DistCol1", "DistCol2", "DistCol3", "Min.Dist") 
    
  2. 遍历行

    for (i in 1:length(df$Colour1L)) {
        df$SourceL[i] <- df[[paste0("Colour",substr(df$Min.Dist,8,8)[i],"L")]][i] 
        df$SourceU[i] <- df[[paste0("Colour",substr(df$Min.Dist,8,8)[i],"U")]][i] 
        df$SourceV[i] <- df[[paste0("Colour",substr(df$Min.Dist,8,8)[i],"V")]][i] 
       }
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有条件地在R中选择多个列

来自分类Dev

有条件地更改data.frame的值,但保持R中其他所有内容不变

来自分类Dev

基于 R 中列中的两个变量有条件地过滤组中的值

来自分类Dev

有条件地在R中命名值

来自分类Dev

R-使用for循环有条件地更改数据帧中的值

来自分类Dev

使用R有条件地替换数据框中的列值

来自分类Dev

使用R有条件地替换数据框中的列值

来自分类Dev

有条件地替换多个数据框的值R

来自分类Dev

有条件地在R中的变量上计算2个日期之间的元素数

来自分类Dev

在 R 中按组有条件地创建变量(写入函数)

来自分类Dev

使用R dyplyr有条件地重新编码/替换变量?

来自分类Dev

根据多个其他变量有条件地替换值

来自分类Dev

R:有条件地替换数据框中几列中的值

来自分类Dev

有条件地填充缺失值,同时在R中重整长而宽的数据集

来自分类Dev

有条件地用矩阵值替换data.frame列。R中的VLOOKUP

来自分类Dev

如何有条件地减去r中的行值

来自分类Dev

有条件地替换data.table R中整个组的值

来自分类Dev

有条件地填充缺失值,同时重塑R中从长到宽的数据集

来自分类Dev

如何有条件地更改R中的列的值?

来自分类Dev

有条件地用R计算列中的值数

来自分类Dev

有条件地将值添加到新列并替换R中的条件列中的值

来自分类Dev

如何根据R中其他列中的数据有条件地执行减法?

来自分类Dev

如何有条件地合并R数据帧中的某些行(而不是其他行)?

来自分类Dev

如何有条件地合并R数据帧中的某些行(而不是其他行)?

来自分类Dev

如何有条件地从数据帧中删除观察值,而又不丢失R中的NA值?

来自分类Dev

如何有条件地从数据帧中删除观察值,而又不丢失R中的NA值?

来自分类Dev

一种更好的方法,根据R中另一df行中的多个值,有条件地填充一个df中的列

来自分类Dev

R-有条件地用另一个数据框中的值替换值

来自分类Dev

如何在R中有多个新列是有条件的情况下使用R中的多个列来表示一列的值?

Related 相关文章

  1. 1

    有条件地在R中选择多个列

  2. 2

    有条件地更改data.frame的值,但保持R中其他所有内容不变

  3. 3

    基于 R 中列中的两个变量有条件地过滤组中的值

  4. 4

    有条件地在R中命名值

  5. 5

    R-使用for循环有条件地更改数据帧中的值

  6. 6

    使用R有条件地替换数据框中的列值

  7. 7

    使用R有条件地替换数据框中的列值

  8. 8

    有条件地替换多个数据框的值R

  9. 9

    有条件地在R中的变量上计算2个日期之间的元素数

  10. 10

    在 R 中按组有条件地创建变量(写入函数)

  11. 11

    使用R dyplyr有条件地重新编码/替换变量?

  12. 12

    根据多个其他变量有条件地替换值

  13. 13

    R:有条件地替换数据框中几列中的值

  14. 14

    有条件地填充缺失值,同时在R中重整长而宽的数据集

  15. 15

    有条件地用矩阵值替换data.frame列。R中的VLOOKUP

  16. 16

    如何有条件地减去r中的行值

  17. 17

    有条件地替换data.table R中整个组的值

  18. 18

    有条件地填充缺失值,同时重塑R中从长到宽的数据集

  19. 19

    如何有条件地更改R中的列的值?

  20. 20

    有条件地用R计算列中的值数

  21. 21

    有条件地将值添加到新列并替换R中的条件列中的值

  22. 22

    如何根据R中其他列中的数据有条件地执行减法?

  23. 23

    如何有条件地合并R数据帧中的某些行(而不是其他行)?

  24. 24

    如何有条件地合并R数据帧中的某些行(而不是其他行)?

  25. 25

    如何有条件地从数据帧中删除观察值,而又不丢失R中的NA值?

  26. 26

    如何有条件地从数据帧中删除观察值,而又不丢失R中的NA值?

  27. 27

    一种更好的方法,根据R中另一df行中的多个值,有条件地填充一个df中的列

  28. 28

    R-有条件地用另一个数据框中的值替换值

  29. 29

    如何在R中有多个新列是有条件的情况下使用R中的多个列来表示一列的值?

热门标签

归档