我想从因子到字符
更改几个data.table列WITH cte_products( ProdName)
AS
(SELECT Prodname FROM Stock WHERE PriceDate = '10Apr15')
SELECT STK.PriceDate, STK.ProdName, Coalesce(FP.Price,OP.Price)
FROM cte_products cte
JOIN Stock STK ON cte.Prodname = STK.Prodname
LEFT OUTER JOIN FruitPrice FP ON cte.Prodname = FP.Name
LEFT OUTER JOIN Othersprice OP ON cte.Prodname = OP.Name
WHERE STK.PriceDate >= '10Jan15' and STK.PriceDate <= '10Apr15'
我可以确定需要更改哪些列
library(data.table)
ir <- as.data.table(iris)
ir[, Species2 := Species]
我可以按名称更新列:
facs <- which(sapply(ir, is.factor))
facs
有没有办法更新列而不按名称引用它们?
答案 0 :(得分:3)
你非常接近。正如@akrun在评论中提到的那样,您可以按索引引用列,这是您使用which
获得的。
ir[, which(sapply(ir, is.factor)) := lapply(.SD, as.character), .SDcols = facs]
甚至更好,正如@Frank在评论中提到的,你可以使用括号。
ir[, (fac) := lapply(.SD, as.character), .SDcols = fac]
现在,如果您查看str(ir)
,您会看到Species
和Species2
现在是chr
而不是factor
。