У меня есть два кадра данных с семью столбцами описательных данных и переменным числом дополнительных столбцов анализа (на основе предыдущих шагов в коде). Я хочу заменить некоторые значения в столбцах анализа 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)])
два кадра данных всегда будут иметь одинаковое количество столбцов.