Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 用新值替换每组/系数的第一个数字_R_Dplyr - Fatal编程技术网

R 用新值替换每组/系数的第一个数字

R 用新值替换每组/系数的第一个数字,r,dplyr,R,Dplyr,我试图用单独data.frame中的新值替换每个IndID的第一个值。注意,每个IndID的观察值数量不同 使用下面的示例代码,我想用dat2 df中相应的列名替换number1和number2的第一个值。在某些情况下,重置价值为NA 如果您不介意使用base R方法,可以执行以下操作。您可以为每个IndID获取第一行的索引,即ind。然后,您就知道需要替换number1和number2中的数字的行。使用索引并将数字替换为dat2 如果您不介意使用base R方法,可以执行以下操作。您可以为每个

我试图用单独data.frame中的新值替换每个IndID的第一个值。注意,每个IndID的观察值数量不同

使用下面的示例代码,我想用dat2 df中相应的列名替换number1和number2的第一个值。在某些情况下,重置价值为NA


如果您不介意使用base R方法,可以执行以下操作。您可以为每个IndID获取第一行的索引,即ind。然后,您就知道需要替换number1和number2中的数字的行。使用索引并将数字替换为dat2


如果您不介意使用base R方法,可以执行以下操作。您可以为每个IndID获取第一行的索引,即ind。然后,您就知道需要替换number1和number2中的数字的行。使用索引并将数字替换为dat2

你可以试试:

 dat[match(dat2$IndID, dat$IndID),] <- dat2
你可以试试:

 dat[match(dat2$IndID, dat$IndID),] <- dat2
使用data.table

library(data.table)
DT = data.table(dat)
DT[dat2, on=.(IndID), mult="first", `:=`(number1 = i.number1, number2 = i.number2)]
您可以交替使用setDTdat而不是创建DT

顺便说一下,这会引发一个警告,因为OP mixed在dat2中浮动,ints在dat中。与base R不同,data.table在修改列时防止意外强制

如果要避免手动指定@Jay的答案中的列:

cols = setdiff(names(dat2), "IndID")
DT[dat2, on=.(IndID), mult="first", (cols) := mget(sprintf("i.%s", cols))]
使用data.table

library(data.table)
DT = data.table(dat)
DT[dat2, on=.(IndID), mult="first", `:=`(number1 = i.number1, number2 = i.number2)]
您可以交替使用setDTdat而不是创建DT

顺便说一下,这会引发一个警告,因为OP mixed在dat2中浮动,ints在dat中。与base R不同,data.table在修改列时防止意外强制

如果要避免手动指定@Jay的答案中的列:

cols = setdiff(names(dat2), "IndID")
DT[dat2, on=.(IndID), mult="first", (cols) := mget(sprintf("i.%s", cols))]

我认为Jay答案中的匹配更好,因为它处理的情况是dat2中的IndID条目I与dat中的顺序不同,而dat中缺少ii。@Frank我同意。我认为Jay答案中的匹配更好,因为它处理的情况是,dat2中的IndID条目与dat中的i顺序不同,而dat中缺少ii。@Frank我同意。哇。非常感谢。我肯定是走上了我要走的路线…哇。非常感谢。我肯定是走上了我要走的路线。。。
cols = setdiff(names(dat2), "IndID")
DT[dat2, on=.(IndID), mult="first", (cols) := mget(sprintf("i.%s", cols))]