R, код работает без цикла for, но не внутри цикла - PullRequest
0 голосов
/ 09 ноября 2018

Я хочу заменить записи одного столбца (Fraction) определенного кадра данных (driftm, 4 столбца, 69042 строки) значением, найденным в другом кадре данных (результаты, 40 строк).

Моя идея заключалась в следующем:

driftm$Fraction[i] <-
as.vector((results$Fraction[match((driftm$variable[i]), (results$WorkingCode))]))

Переменная, которую я проверяю (drift $ variable), является фактором, поэтому я конвертирую в вектор. Если вручную установить i на любое значение в пределах длины значения driftm $, код работает и заменяется соответствующим образом. Но в цикле for это ничего не делает.

for (i in length(driftm$values)){
driftm$Fraction[i] <-
as.vector((results$Fraction[match((driftm$variable[i]), (results$WorkingCode))]))
}

Это дрейф фрейма данных Это результаты фрейма данных

Так что, в основном, я хочу заменить то, что сейчас написано как «Заменить», на правильную строку для указанной фракции, взятую из результатов $ Fraction.

Что может быть более элегантным способом сделать это?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Чуть более элегантное решение:

Данные:

driftm<-data.frame(Fraction=1:10, Variable=c(letters[1:5],letters[5:1]))
results<-data.frame(Fraction=10:11, WorkingCode=c(letters[2:3]))

Использование dplyr:

library(dplyr)
driftm$Fraction<-left_join(driftm,results,by=c("Variable"="WorkingCode")) %>% 
  with(coalesce(Fraction.y,Fraction.x))

Результат:

   Fraction Variable
1         1        a
2        10        b
3        11        c
4         4        d
5         5        e
6         6        e
7         7        d
8        11        c
9        10        b
10       10        a
0 голосов
/ 09 ноября 2018

Нашел мою проблему

Несмотря на то, что все еще интересовался более элегантным решением, моей простой ошибкой было определение цикла for.

for (i in **1:**length(driftm$variable){
driftm$Fraction[i] <-
as.vector((results$Fraction[match((driftm$variable[i]), (results$WorkingCode))]))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...