R 数据帧中值的条件替换

R 数据帧中值的条件替换,r,dataframe,R,Dataframe,我有两个数据框,其中包含七个描述性数据列和数量可变的附加分析列(基于代码中的早期步骤)。我想根据dataframe1的第一列中的布尔值,用dataframe2中的相应值替换dataframe1的分析列中的一些值 dataframe1: structure(list(compare = c(1, 1, 0, 1, 1, 1, 0, 1), ID_TREE = 29338:29345, ID_PLOT = c(1068L, 1068L, 1068L, 1068L, 1068L, 1068L

我有两个数据框,其中包含七个描述性数据列和数量可变的附加分析列(基于代码中的早期步骤)。我想根据
dataframe1
的第一列中的布尔值,用
dataframe2
中的相应值替换
dataframe1
的分析列中的一些值

dataframe1

structure(list(compare = c(1, 1, 0, 1, 1, 1, 0, 1), ID_TREE = 29338:29345, 
    ID_PLOT = c(1068L, 1068L, 1068L, 1068L, 1068L, 1068L, 1068L, 
    1068L), ID_CATEGORY = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), 
    ID_WOOD_SPGR_GREENVOL_DRYWT = c(28L, 28L, 28L, 7L, 28L, 28L, 
    28L, 28L), ID_BARK_SPGR_GREENVOL_DRYWT = c(25L, 25L, 25L, 
    18L, 25L, 25L, 25L, 25L), ID_BARK_VOL_PCT = c(2L, 2L, 2L, 
    10L, 2L, 2L, 2L, 2L), VOLCFGRS = c(3.21875, 6.576453125, 
    12.2406407654729, 0.863593268246, 1.15809306543472, 0.755301358016, 
    13.6662694477056, 4.549483421824)), row.names = c(NA, -8L
), class = c("data.table", "data.frame"), .internal.selfref = <pointer: (nil)>)
到目前为止,我已经获得了以下一行代码用于1列:

df1[df1$compare==0,8]<- df2[df1$compare==0,8]
df1[df1$compare==0,8]最简单的方法是,您可以“反转”您的子集:

df1[df1$compare==0,8:ncol(df1)] <- df2[df1$compare==0,8:ncol(df1)]
最简单的方法是,您可以“反转”您的子集:

df1[df1$compare==0,8:ncol(df1)] <- df2[df1$compare==0,8:ncol(df1)]

欢迎来到SO。请与
dput
和预期output@mamend行数是多少?它们也总是有相同的行数吗?@nsinghs是的,它们也总是有相同的行数。@mamend您的代码在我的机器上按原样工作。欢迎使用SO。请与
dput
和预期output@mamend行数是多少?它们也总是有相同的行数吗?@nsinghs是的,它们也总是有相同的行数。@mamend您的代码在我的机器上按原样工作。谢谢大家的回复。反向子集确实有效,谢谢!然而,我还发现根本原因是我的data.frames也是data.tables,这就是导致我的原始代码无法工作的原因。仅将它们转换为data.frames就解决了最初的问题。感谢大家的回复。反向子集确实有效,谢谢!然而,我还发现根本原因是我的data.frames也是data.tables,这就是导致我的原始代码无法工作的原因。仅将它们转换为data.frames就解决了最初的问题。
df1[,-(1:7)]<- ifelse(df1$compare==0, df2[,-(1:7)], df1[,-(1:7)])
df1[df1$compare==0,8:ncol(df1)] <- df2[df1$compare==0,8:ncol(df1)]
rbind(df1[df1$compare!=0], df2[df1$compare==0])