Если я правильно понимаю, ОП хочет добавить дополнительный столбец evaluation
с тремя уровнями фактора, который зависит от числовых значений c в столбце sentiment
.
Этого можно достичь без используя for
l oop через векторные функции R.
К сожалению, OP не предоставил образец набора данных, поэтому нам нужно создать его с помощью
df <- data.frame(sentiment = c(-0.5, -0.25, 0, 0.25, 0.5))
cut()
Функция может быть использована для преобразования чисел c в коэффициент. Он делит диапазон x
на интервалы и кодирует значения в x
в зависимости от того, на какой интервал они попадают:
df$evaluation <- cut(df$sentiment, breaks = c(-Inf, -0.25, 0.25, Inf),
labels = c("negative", "neutral", "postive"))
df
sentiment evaluation
1 -0.50 negative
2 -0.25 negative
3 0.00 neutral
4 0.25 neutral
5 0.50 postive
cut()
использует правые закрытые интервалы по умолчанию. Таким образом, крайний случай -0.25 сопоставлен с «отрицательным». который не полностью соответствует требованиям OP и образцу кода OP.
В качестве альтернативы, вместо cut()
:
df$evaluation <- ifelse(df$sentiment < -0.25, "negative",
ifelse(df$sentiment > 0.25, "positive", "neutral"))
df
sentiment evaluation
1 -0.50 negative
2 -0.25 neutral
3 0.00 neutral
4 0.25 neutral
5 0.50 positive
могут использоваться вложенные вызовы
ifelse()
.
Теперь это полностью соответствует требованию OP и образцу кода OP, который требует, чтобы -0,25 и 0,25 были симметрично сопоставлены с «нейтральным».
Для полноты, есть также функция case_when()
из пакета dplyr
, который можно использовать, чтобы избежать вложенных вызовов ifelse()
:
library(dplyr)
df %>%
mutate(evaluation = case_when(
sentiment < -0.25 ~ "negative",
sentiment > 0.25 ~ "positive",
TRUE ~ "neutral"
))
sentiment evaluation
1 -0.50 negative
2 -0.25 neutral
3 0.00 neutral
4 0.25 neutral
5 0.50 positive