2012-11-29 19 views
9

A data.table acemi soruya dönüştürün. data.table'daki bir sütun kümesini bunlara bir matematiksel formül uygulayarak dönüştürmek istiyorum. Sütun dizisi, toplam sütun sayısının 1 veya daha fazlasını hariç tutmalıdır.Yeni bir sütun kümesini bir data.table

data.frame açısından yapardım:

data(iris) 
head(iris) 
    Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
1   5.1   3.5   1.4   0.2 setosa 
2   4.9   3.0   1.4   0.2 setosa 
3   4.7   3.2   1.3   0.2 setosa 
4   4.6   3.1   1.5   0.2 setosa 
5   5.0   3.6   1.4   0.2 setosa 
6   5.4   3.9   1.7   0.4 setosa 

iris[, -5] <- iris[, -5] * 1e3 
head(iris) 
    Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
1   5100  3500   1400   200 setosa 
2   4900  3000   1400   200 setosa 
3   4700  3200   1300   200 setosa 
4   4600  3100   1500   200 setosa 
5   5000  3600   1400   200 setosa 
6   5400  3900   1700   400 setosa 

Ben data.table içinde multiple columns nasıl seçileceğini biliyoruz: hatta

iris.dt <- data.table(iris) 
head(iris.dt[, -5, with = FALSE]) 

ya:

head(iris.dt[, !"Species", with = FALSE]) 

Nasıl aslında bu dönüşümüyararlanarak seçilen sütunlarbaşvuru kaynağı?

cevap

11

ne referansı (:=) ile ataması ile .SDCols bağımsız değişken ile ilgili:

DT <- data.table(iris) 
DT[, c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width") 
    :=lapply(.SD, function(x) x*1000), .SDcols=1:4] 
# Alternatively you can grab the names the usual way: 
# DT[, names(DT)[1:4] := lapply(.SD, function(x) x*1000), .SDcols=1:4] 
DT 
#  Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
# 1:   5100  3500   1400   200 setosa 
# 2:   4900  3000   1400   200 setosa 
# 3:   4700  3200   1300   200 setosa 
# 4:   4600  3100   1500   200 setosa 
# 5:   5000  3600   1400   200 setosa 
# ---                
# 146:   6700  3000   5200  2300 virginica 
# 147:   6300  2500   5000  1900 virginica 
# 148:   6500  3000   5200  2000 virginica 
# 149:   6200  3400   5400  2300 virginica 
# 150:   5900  3000   5100  1800 virginica 
İlgili konular