假设我有一个包含任意数量变量的数据框,加上3个RGB颜色变量。我想将RGB颜色转换为LAB,并将它们添加到数据框中。这是丑陋的代码:
df <- data.frame(id=c(1:10),red=runif(10),green=runif(10),blue=runif(10))
df <- cbind(df,convertColor(subset(df,select=c("red","green","blue")),from="sRGB",to="Lab"))
如果mutate可以通过一次调用生成多个变量,那就太棒了;例如(伪代码):
df <- data.frame(id=c(1:10),red=runif(10),green=runif(10),blue=runif(10))
df <- df %>% mutate(list("L","a","b") = convertColor(cbind(red,green,blue),from="sRGB",to="Lab"))
使用dplyr是否有类似的方法?
答案 0 :(得分:2)
如果你想要一些语法糖,你可以使用这段代码:
df %>%
select(red,green,blue) %>%
convertColor(from="sRGB",to="Lab") %>%
cbind(df,.)
答案 1 :(得分:2)
如果您想避免不必要的数据复制,这是data.table
语法,通过修改您的数据来添加新列:
library(data.table)
dt = as.data.table(df)
dt[, c('L', 'a', 'b') := as.data.table(convertColor(.SD, from = 'sRGB', to = 'Lab'))
, .SDcols = c('red', 'green', 'blue')]