2012-11-29 16 views
9

A data.table pytanie nowicjusza. Chciałbym przekształcić zestaw kolumn w data.table, stosując do nich wzór matematyczny. Zestaw kolumn musi wykluczyć 1 lub więcej z całkowitej liczby kolumn.Przekształć zestaw kolumn w data.table

W data.frame względem zrobiłbym:

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 

wiem jak wybrać multiple columns w data.table:

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

lub nawet:

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

Jak rzeczywiście przekształcić te wybrane kolumny korzystające z data.table przejazd po referencji?

Odpowiedz

11

co pomocą .SDCols argumentu oraz przypisanie przez odniesienie (:=):

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 
Powiązane problemy