Получить столбцы за строкой из data.table
raw
это data.table
и следующий код работает:
raw[,r_responseTime] #Returns the whole column
raw[,c_filesetSize] #Same as above, returns column
plot(raw[,r_responseTime]~raw[,c_filesetSize]) #draws something
Теперь я хочу указать эти столбцы из строки, например:
col1="r_reponseTime"
col2="c_filesetSize"
Как я могу теперь достичь того же, что и выше, при ссылке на столбцы по строке?
raw[,col1] #Returns the whole column
raw[,col2] #Same as above, returns column
plot(raw[,col1]~raw[,col2]) #draws something
Не работает, конечно, потому что мне нужна какая-то "разыменование". Я не знал, что искать в справке и Интернете, так что извините за тупой вопрос.
3 ответа
Было бы неплохо, если бы вы предоставили воспроизводимый пример или, по крайней мере, показали, какие имена столбцов raw
и что r_responseTime
а также c_filesetSize
содержат. Как говорится, get
ваша функция для разыменования, так что попробуйте:
raw[, get(col1)]
raw[, get(col2)]
plot(raw[, get(col1)] ~ raw[, get(col2)])
Альтернативой является использование match()
функция или %in%
оператор.
raw[, match(col1, names(raw)),with=FALSE]
Если у вас есть вектор строк, вы можете использовать mget
cols = c("r_reponseTime", "c_filesetSize")
raw[, mget(cols)]
К сожалению, "получить" может быть проблематично! Смотрите пример ниже:
m = 100
x1 = sample(c("cat", "dog", "horse"), m, replace=TRUE)
y1 = rnorm(m)
fill1 = sample(c("me", "myself", "dude"), m, replace=TRUE)
df = data.frame("x"=x1, "y"=y1, "fill"=fill1)
dt = data.table(df)
получить не работает!
y = "y"
dt[ , get(y)]
получить работы!
yCol = "y"
dt[ , get(yCol)]
работает всегда, но это не красиво!
eval(parse(text = paste0("values = dt[ ,", y, "]")))
eval(parse(text = paste0("values = dt[ ,", yCol, "]")))