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