Я пытаюсь заменить несколько столбцов большого фрейма данных на основе индексации. То, что я хочу / сделал до сих пор, объединяет этот пост и этот пост . Позвольте мне привести пример для ясности.
Вот очень упрощенный пример данных в формате dput:
DF <-
structure(list(Fruits = structure(c(1L, 3L, 4L, 2L),
.Label = c("Apples", "Avocado", "Oranges", "Pineapple"),
class = "factor"), Weight2 = c(20L, 15L, 40L, 60L),
Weight = c(2L, 4L, 8L, 5L), `Number` = c(10L,
16L, 6L, 20L)), class = "data.frame", row.names = c(NA, -4L))
Fruits Weight Weight2 Number
Apples 20 2 10
Oranges 15 4 16
Pineapple 40 8 6
Avocado 60 5 20
Что я хочу сделать, это для DF, учитывая список фруктов, изменить столбцы Weight и Weight2 to N. Я упомяну, что мой DF - это фактически список фреймов данных, а мой список - это список списков, поэтому необходима индексация. Вот мой код:
fruit.to.change <- c("Apples","Pineapple")
DF$Weight[which(DF$Fruits == fruit.to.change)] <- "N" #change the first column but I want to change multiple columns.
colID <- grepl("Weight", names(DF))
which(DF$Fruits %in% fruit.to.change[1:length(fruit.to.change)]) #gets the positions matching
Но не знаете, как выбрать и заменить столбцы в colID
? Я уверен, что это просто еще один уровень индексации, но не могу понять это. Я в основном хочу что-то вроде DF$Weight:Weight2 [which(DF$Fruits %in% fruit.to.change )] <- "N"
ОЧЕНЬ большое спасибо.