заменить часть data.table на вектор - PullRequest
3 голосов
/ 22 мая 2019

У меня есть таблица данных, которую можно создать с помощью

top_m_dt = data.table(future_fip = c(102, 104, 503),
                  model = c("model_1", "model_2", "model_3"),
                  time_period = c("F1", "F2", "F3"),
                  emission = c("emission_1", "emission_2", "emission_3"),
                  top_1_fip = c(666, 666, 666),
                  top_2_fip = c(666, 666, 666),
                  top_3_fip = c(666, 666, 666))

Я хотел бы заменить строку 1 и столбцы top_1_fip, top_2_fip, top_3_fip набором значений, скажем,c(10, 20, 30).

Ни одно из следующих действий не работает:

top_m_dt[1, c("top_1_fip", "top_2_fip", "top_3_fip")] <- 
    as.numeric(analog_dat_F1$analog_NNs_county[1:3])`

ИЛИ

top_m_dt[1, 5:7 ] <- list(analog_dat_F1$analog_NNs_county[1:3])[[1]]

ИЛИ

top_m_dt[1, (c("top_1_fip", "top_2_fip", "top_3_fip")):= 
             analog_dat_F1$analog_NNs_county[1:3]] `

Все они заменяют 10 во всех трех местах.какие-либо предложения?

1 Ответ

3 голосов
/ 22 мая 2019
Синтаксис

data.table немного отличается, и не все, что работает на кадре данных, работает на data.table.В этом случае для замены значений из конкретной строки и столбца вы можете использовать as.list

library(data.table)
top_m_dt[1, c("top_1_fip", "top_2_fip", "top_3_fip") := as.list(c(10, 20, 30))]

top_m_dt
#   future_fip   model time_period emission top_1_fip top_2_fip top_3_fip
#1: target_fip model_n          F1 emission        10        20        30
#2: target_fip model_n          F2 emission       666       666       666
#3: target_fip model_n          F3 emission       666       666       666
...