R 用向量替换data.table的一部分

R 用向量替换data.table的一部分,r,replace,data.table,R,Replace,Data.table,我有一个数据表,可以通过 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_

我有一个数据表,可以通过

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\u 1\u fip
top\u 2\u fip
top\u 3\u 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])`

它们全部替换所有三个位置中的
10
。有什么建议吗?

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

您的示例代码没有运行---您的意思是要将
目标fip
模型n
排放
值都用引号括起来吗?对不起,最后一个括号没有用{code}模式括起来!好的,这些排放物在我的电脑里有值!所以,是的,让我们在上面加上引号。对不起,我在
列表
之前缺少
as.
。这狗屎对一切都很敏感!
top_m_dt[1, (c("top_1_fip", "top_2_fip", "top_3_fip")):= 
             analog_dat_F1$analog_NNs_county[1:3]] `
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