у меня есть кадр данных с 4-мя колонками:Изменение значений столбцов dataframe на основе списка индексов
myData<-mtcars[1:20,1:4]
также список с теми же именами столбцов:
myList<-list(mpg=c(1,2,3), cyl=c(2,10), disp=integer(0), hp=c(3))
Как я могу изменить значения каждого столбца кадра данных на основе соответствующего вектора списка?
Поэтому я хочу установить первый, второй и третий строки myData$mpg
, второй и десятой строки myData$cyl
и т. Д., Например. NA.
Я пробовал следующую строку, но она не работает.
mapply(function(x, y)y[x, names(x)]<-NA, myList, myData, SIMPLIFY=FALSE)
Ошибка у [х, имена (х)]: неправильное число измерений
Спасибо Гопала! Как вы, возможно, заметили, я новичок в R и не знаю о глобальном задании! Но я думаю, что проблема с моим кодом, вероятно, связана с тем, что myData и myList имеют разные размеры. Еще раз спасибо. – Zrs
Это не имеет значения. Не уверен. Если вы изменяете что-то внутри функции, то это недоступно вне этой функции. Таким образом, вам нужно либо «вернуть» то, что вы изменили из функции, либо сделать глобальное присвоение, чтобы оно было изменено в глобальной среде. Работает эфир. – Gopala
Нет необходимости в глобальном присвоении, просто присвойте результаты «Map/mapply/sapply/lapply» обратно к исходному результату - 'myData [] <- Map (replace, myData, myList, NA)', как я прокомментировал ниже. Использование '<< -' обычно обескураживается, так как оно может давать непреднамеренные результаты в зависимости от того, где он заканчивается. – thelatemail