У меня есть набор данных с тремя значениями: Germany
, Federal Republic Of Germany
и German Democratic Republic
в качестве значений внутри столбца. У меня есть еще один столбец под названием Effect
, который представляет собой класс даты. Я хочу переименовать значение Country
с Germany
на Federal Republic Of Germany
для всех значений, где Effect > 1990
.
Я пробовал следующий код, и он не работал
clean.data$Country <- clean.data %>% filter(Country == "Germany" & Effect > 1990) %>% rename(Federal Republic Of Germany = Germany) #Method 1
clean.data$Country <- clean.data %>% filter(Country == "Germany" & Effect > 1990) %>% rename("Federal Republic Of Germany" = "Germany") #Method 2
Я также не могу найти команду для извлечения номеров строк, соответствующих фильтру. Если бы я мог, я бы сделал
rownumbers <- #Command to find row numbers
clean.data$Country[rownumbers] <- "Federal Republic Of Germany"
Какие еще есть способы изменить наблюдение? Или я что-то не так делаю в приведенной выше цепочке dplyr?
Назначение должно быть тому же объекту или другому объекту, а не столбцу, поскольку вывод из rename
по-прежнему является data.frame
, а rename
предназначен для переименования столбца, а не значения.
library(dplyr)
clean.data1 <- clean.data %>%
filter(Country == "Germany" & Effect > 1990) %>%
rename(`Federal Republic Of Germany` = "Germany")
Если мы хотим изменить значение, то делаем
clean.data %>%
mutate(Country = case_when(Country == "Germany" & Effect > 1990 ~ "Federal Republic Of Germany", TRUE ~ Country))
В base R
мы можем использовать индекс, если нам нужно изменить значения столбца «Страна».
i1 <- with(clean.data, Country == "Germany" & Effect > 1990)
clean.data$Country[i1] <- "Federal Republic Of Germany"
@checkmate363 Да, rename
переименовывает имя столбца. ~
— это оператор, предполагающий, что если логическое выражение в левой части этого оператора ИСТИНА, то значением является правая часть. TRUE
в конце будет для всех остальных случаев, верните столбец Country
Хорошо, спасибо. У меня есть еще одно продолжение. Сейчас я пытаюсь переименовать Germany
в Weimar Republic
для Effect < 1945
. Я снова использовал ваш код, но изменил "Federal Republic Of Germany"
на "Weimar Republic"
и изменил Effect > 1990
на Effect < 1945
. Однако я получаю даты Эффекта в диапазоне от 1929 до 1986 года. Нужно ли мне что-то еще менять?
@checkmate363 — это ваш числовой класс Effect
столбца, т. е. class(clean.data$Effect)
@checkmate363, вы также можете проверить, есть ли элементы NA в этих столбцах, поскольку ==
возвращает NA для случаев, которые являются NA
Это класс свиданий, и да, есть несколько NA.
@checkmate363 Если это класс Date
, вы не можете делать Effect > 1990
, вам нужно извлечь «год» из Date
, то есть если у вас есть смазка year(Effect) < 1945
или в base R
as.numeric(format(Effect, "%Y")) < 1945
У меня есть смазка, так что это звучит хорошо. Спасибо за помощь.
В base R
это может работать:
#Code
rownumbers <- which(clean.data$Country == "Germany" & clean.data$Effect > 1990)
clean.data$Country[rownumbers] <- "Federal Republic Of Germany"
Так что похоже, что я использовал
rename
неправильно и должен был использоватьmutate
. На будущее, что делают~ "Federal Republic Of Germany", TRUE ~ Country)
иcase_when()
?