我有一个包含十六进制颜色值的列的数据框。我想改变数据框,以便我可以在单独的列中使用红色,蓝色和绿色值(rgb格式),因此我使用override func viewDidLoad() {
super.viewDidLoad()
self.scrollView.contentSize.height = 1000
}
包中的col2rgb
函数。这就是我命名为grDevices
的数据框在变异之前的样子:
color_count
这是我改变数据框的代码:
hex Count
<chr> <int>
1 #00000B 3
2 #00000C 10
3 #00000D 1
4 #00000E 42
5 #00000F 4
这是输出:
color_rgb <- color_count %>%
mutate(r = col2rgb(hex)[1], g = col2rgb(hex)[2], b = col2rgb(hex)[3])
rgb值仅对第一行正确,每隔一行只显示完全相同的组合。
我尝试使用 hex Count r g b
<chr> <int> <int> <int> <int>
1 #00000B 3 0 0 11
2 #00000C 10 0 0 11
3 #00000D 1 0 0 11
4 #00000E 42 0 0 11
5 #00000F 4 0 0 11
作为this other thread建议,但它没有用。
答案 0 :(得分:1)
> col2rgb(color_count$hex)
[,1] [,2] [,3] [,4] [,5]
red 0 0 0 0 0
green 0 0 0 0 0
blue 11 12 13 14 15
> class(col2rgb(color_count$hex))
[1] "matrix"
col2rgb
为您提供了一个矩阵,因此您需要按行而不是元素进行索引:
> col2rgb(color_count$hex)[1,]
[1] 0 0 0 0 0
> col2rgb(color_count$hex)[2,]
[1] 0 0 0 0 0
> col2rgb(color_count$hex)[3,]
[1] 11 12 13 14 15
在[]
中的索引后添加逗号意味着您按行和列而不是按元素进行索引。 ,
之前的数字是行索引,而 ,
之后的数字是列索引。
library(dplyr)
color_rgb <- color_count %>%
mutate(r = col2rgb(hex)[1,], g = col2rgb(hex)[2,], b = col2rgb(hex)[3,])
# hex Count r g b
# 1 #00000B 3 0 0 11
# 2 #00000C 10 0 0 12
# 3 #00000D 1 0 0 13
# 4 #00000E 42 0 0 14
# 5 #00000F 4 0 0 15
答案 1 :(得分:0)
这是一个避免在每一行中多次调用col2rgb
的解决方案,而却牺牲了使用一些更复杂的tidyverse操作
library(tidyverse)
color_rgb <- color_count %>%
group_nest(hex, Count) %>%
mutate(
data = map(hex, ~col2rgb(.) %>% t %>% as_tibble)
) %>%
unnest(data)
# A tibble: 5 x 5
# hex Count red green blue
# <chr> <dbl> <int> <int> <int>
# 1 #00000B 3 0 0 11
# 2 #00000C 10 0 0 12
# 3 #00000D 1 0 0 13
# 4 #00000E 42 0 0 14
# 5 #00000F 4 0 0 15