Я несколько значений в dataframe называемой «ценности»Заменить значение в Dataframe если попадают в другой dataframe
т.е.:
Sam Ned Ted Ann
500 430 57 212
410 265 69 341
189 554 153 457
236 311 590 271
50 568 234 442
И некоторый контроль качества флагов в отдельном dataframe «флагов»
Sam$F Ned$F Ted$F Ann$F
1 1 1 0
0 0 1 0
0 0 1 0
0 0 0 0
0 0 1 0
Я хотел бы заменить число в 'значениях' на NA, если эквивалентная запись во флагах равна 1, что приводит к следующим
Sam Ned Ted Ann
NA NA NA 212
410 265 NA 341
189 554 NA 457
236 311 590 271
50 568 NA 442
Этот вопрос очень похож на этот: Replacing certain values in data.frame in R
Какой была решена аккуратно с «Объединить таблицы» решения.
За исключением того, что у меня есть много столбцов данных для выполнения этого, а не только для одного. Однако я должен иметь возможность получить для меня то же самое решение «таблицы слияния».
Чтобы объединить 2 таблицы (и заменить 1s с NA Я использовал следующие
F2 <-Flags
F2[F2 == "1"] <- "NA"
# Create identical column names for values and F2 for matching
samples <-colnames(Rvalues)
colnames(F2) <-samples
#Create an ID column for F2 and values
F2$ID <- c(1,2,3,4,5)
Rvalues$ID <- c(1,2,3,4,5)
out2 <- merge(Rvalues, F2, by = c("ID"), all.x = TRUE)
В результате out2 dataframe выглядит следующим образом:
ID Sam.x Ned.x Ted.x Ann.x Sam.y Ned.y Ted.y Ann.y
1 1 500 430 57 212 NA NA NA 0
2 2 410 265 69 341 0 0 NA 0
3 3 189 554 153 457 0 0 NA 0
4 4 236 311 590 271 0 0 0 0
5 5 50 568 234 442 0 0 NA 0
Так что я хотел бы использовать решение (по Chase) по ссылке выше, в пределах цикла для прохождения столбцов для каждого образца.
Я пробовал следующее:
for [i in samples]
{
out3 <- transform(out2, [i]$new = ifelse(is.na([i].x), [i].y, [i].x), [i].x = NULL, [i].y = NULL)}
Это не работает (сообщение об ошибке
"Error: unexpected '[' in:
"{
out3 <- transform(out2, newdata = ifelse(is.na(["")
Так что у меня что-то не так, без скобок [] также не работает.
Любые исправления значительно оценили, большое спасибо
Wow, что это так просто и очевидно, да, они в одном измерении и порядке. Спасибо. Это делает цикл совершенно ненужным. Если, например, порядки столбцов были разными, знаете ли вы, что цикл был близок? – jksl
Если порядок столбцов будет отличаться в data.frames, тогда вы можете: 1) сортировать столбцы, чтобы получить одинаковый порядок в обоих файлах данных. 2) использовать некоторые из 'apply' семейных функций. Для циклов в R обычно довольно медленно, и лучше избегать их использования. – DrDom