Обновление фрейма данных в R без цикла for - PullRequest
0 голосов
/ 23 мая 2018

У меня есть один основной фрейм данных df:

df <- data.frame(c("A", "B", "C"), c(1,2,3), c(3,1,2), c(4,2,1), rep(NA, 3), rep(NA, 3))
colnames(df) <- c("text", "var1", "var2", "var3", "value1", "value2")

И еще один фрейм данных df.upd с новой информацией:

df.upd <- data.frame(c(1,2), c(3,1), c(4,2),c(0.5, 0.6), c(12, 20))                           
colnames(df.upd) <- c("var1", "var2", "var3", "value1", "value2")
> df
text var1 var2 var3 value1 value2
1    A    1    3    4     NA     NA
2    B    2    1    2     NA     NA
3    C    3    2    1     NA     NA
> df.upd
  var1 var2 var3 value1 value2
1    1    3    4    0.5     12
2    2    1    2    0.6     20

Я хочу сопоставить столбцы "var1", "var2 "," var3 "и обновите столбцы" value1 "и" value2 ".Таким образом, строки 1 и 2 из df.upd будут обновлять строки 1 и 2 из df, поэтому as.numeric(df.upd[row x, 1:3])==as.numeric(df[row y, 2:4]) должно быть TRUE.

Мастер df имеет около 30 тыс. Строк и 60 столбцов, поэтому цикл for не подходит.Есть идеи, как сделать это быстрее?

1 Ответ

0 голосов
/ 23 мая 2018

Это ответ для цикла, но он все еще может быть полезным и быстрым, поскольку процесс векторизован.

ind <- intersect(names(df), names(df.upd))
for (i in ind) {
  df[1:length(df.upd[,i]),i]  <- df.upd[,i]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...