#r #dataframe #for-loop
Вопрос:
У меня есть фрейм данных, содержащий столбец с двоичными переменными (заостренными или широкими). Чтобы выполнить мои вычисления, мне нужно заменить их на 0 или 1. Я хочу написать цикл for, который делает это за меня.
Мой код:
binary_To_Number<-function(df)
{
for(i in df)
{
if(i=="pointed")
{
i<-1
}
else if(i=="broad")
{
i<-0
}
else if(is.na(i))
{
print("NA")
}
else
{
}
}
}
binary_To_Number(town$shape)
Я попытался использовать этот фрагмент кода. Моя первая проблема с этим заключается в том, что я не знаю, как сохранить результаты. Поэтому мой код временно изменяет i, но не сохраняет его в df. Я знаю, что вы можете создать пустой вектор хранения для хранения результатов в нем, но могу ли я немедленно заменить переменную в моем df?
Вторая проблема заключается в том, что мой код останавливается и выдает мне сообщение об ошибке, если оно касается i, содержащего NA.
Error in if (i == "pointed") { : missing value where TRUE/FALSE needed
Могу ли я что-то с этим поделать или мне сначала нужно заменить NA заполнителем?
Комментарии:
1. Преимущество R заключается в том, что уже существуют встроенные способы изменения вектора, например
town$shape[town$shape=="pointed"] <- 1
.
Ответ №1:
Вы также можете использовать dplyr (гарантирует 0 для не указано):
library(dplyr)
df <- df %>%
mutate(
isPointed = as.integer(tolower(shape) == 'pointed')
)
Выход:
shape isPointed
1 Pointed 1
2 broad 0
3 pointed 1
Фрейм данных, который я использовал:
df <- data.frame(
shape = c('Pointed', 'broad', 'pointed'),
stringsAsFactors = FALSE
)