更新data.table中列的子集的类

时间:2015-05-14 15:31:59

标签: r data.table

我想从因子到字符

更改几个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

有没有办法更新列而不按名称引用它们?

1 个答案:

答案 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),您会看到SpeciesSpecies2现在是chr而不是factor