簡體   English   中英

有條件地替換數據框中的值

[英]Conditional replacement of values in 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, 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)>)

dataframe2

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(-2.32258333333333, 5.81718680555556, 
    12.2406407654729, -32.9676545519935, -27.9506018960536, -38.5047101237694, 
    13.6662694477056, 1.9138577595677)), 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,-(1:7)]<- df2[df1$compare==0,-(1:7)]

我也這樣,並得到了類似的錯誤:

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的dijointed排在一起。

rbind(df1[df1$compare!=0], df2[df1$compare==0])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM