R 使用索引填充列

R 使用索引填充列,r,data.table,R,Data.table,给定以下数据帧: df1 <- data.table("1A"=c(0,0,0,0),"1B"=c(1:4),"2A"=c(0,0,0,0), "2B"=c(1:4)) df2 <- data.table("1A"=c(1:4),"2A"=c(1:4)) > df1 1A 1B 2A 2B 1: 0 1 0 1 2: 0 2 0 2 3: 0 3 0 3 4: 0 4 0 4 > df2 1 2 1: 1 1 2: 2

给定以下数据帧:

df1 <- data.table("1A"=c(0,0,0,0),"1B"=c(1:4),"2A"=c(0,0,0,0), "2B"=c(1:4))
df2 <- data.table("1A"=c(1:4),"2A"=c(1:4))
> df1
   1A 1B 2A 2B
1:  0  1  0  1
2:  0  2  0  2
3:  0  3  0  3
4:  0  4  0  4
> df2
    1  2
 1: 1  1
 2: 2  2
 3: 3  3
 4: 4  4
我试图以相同的顺序,在不更改df1 colname的情况下,用df2中的值填充由“indx”标识的列的值。以便:

 > df1
       1A 1B 2A 2B
    1:  1  1  1  1
    2:  2  2  2  2
    3:  3  3  3  3
    4:  4  4  4  4
请注意,这是一个简化的示例,我的实际数据包含大约50列需要填充,因此我需要一种编程方法


非常感谢

灵感来自@Frank的评论-同样的东西适用于常规的
:=
语法,并且不引入额外的副本:

df1[, (indx) := df2]

受@Frank评论的启发-同样的东西适用于常规的
:=
语法,并且不引入额外的副本:

df1[, (indx) := df2]

受@Frank评论的启发-同样的东西适用于常规的
:=
语法,并且不引入额外的副本:

df1[, (indx) := df2]

受@Frank评论的启发-同样的东西适用于常规的
:=
语法,并且不引入额外的副本:

df1[, (indx) := df2]


这是不正常的语法,但是<代码>df1[,indx]谢谢@Frank!像往常一样整洁。这是不正常的语法,但是<代码>df1[,indx]谢谢@Frank!像往常一样整洁。这是不正常的语法,但是<代码>df1[,indx]谢谢@Frank!像往常一样整洁。这是不正常的语法,但是<代码>df1[,indx]谢谢@Frank!在实际数据中使用此语法时,会出现以下错误:“提供的460800项将分配给列‘SE ICE cars’(451200未使用)[…]48列矩阵RHS:=将被视为一个向量”,并且只重复复制第一列。你知道问题出在哪里吗?听起来你的RHS(即
df2
)是一个矩阵,而不是你在OP中介绍的
数据。表
,所以先转换成
数据。表
为避免使用
,改为
df1[,(indx):=df2]
@Pierrelahound point,我忘了这也适用于列号。当我在实际数据中使用此语法时,出现以下错误:“提供的460800项将分配给列‘SE ICE cars’(451200未使用)[…]48列矩阵RHS:=将被视为一个向量”,并且只重复复制第一列。你知道问题出在哪里吗?听起来你的RHS(即
df2
)是一个矩阵,而不是你在OP中介绍的
数据。表
,所以先转换成
数据。表
为避免使用
,改为
df1[,(indx):=df2]
@Pierrelahound point,我忘了这也适用于列号。当我在实际数据中使用此语法时,出现以下错误:“提供的460800项将分配给列‘SE ICE cars’(451200未使用)[…]48列矩阵RHS:=将被视为一个向量”,并且只重复复制第一列。你知道问题出在哪里吗?听起来你的RHS(即
df2
)是一个矩阵,而不是你在OP中介绍的
数据。表
,所以先转换成
数据。表
为避免使用
,改为
df1[,(indx):=df2]
@Pierrelahound point,我忘了这也适用于列号。当我在实际数据中使用此语法时,出现以下错误:“提供的460800项将分配给列‘SE ICE cars’(451200未使用)[…]48列矩阵RHS:=将被视为一个向量”,并且只重复复制第一列。你知道问题出在哪里吗?听起来你的RHS(即
df2
)是一个矩阵,而不是
数据。表
,正如你在OP中介绍的那样,所以转换成
数据。表
首先要避免使用
,而不是
df1[,(indx):=df2]
@pierrelahough good point,我忘了这也适用于列号。