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,我忘了这也适用于列号。