В моем data.frame d2
я пытаюсь recode
добавить несколько значений в несколько столбцов и оставить все остальное в этих столбцах без изменений. В частности, я хочу сделать следующее:
profic
: заменить 77 на 99;
cf.type
: заменить 15 на 99;
Length
: заменить 0 на 1 и заменить 3 на 2;
graded
: заменить 88 на 99.
Я пробовал следующее, но, похоже, я не получаю желаемого результата (т. Е. Другие значения в перекодированных столбцах удаляются), есть ли это исправление?
library(tidyverse)
d2 <- read.csv('https://raw.githubusercontent.com/rnorouzian/m/master/v13.csv')
d3 <- mutate(d2, profic = recode(profic, "77" = "99"),
cf.type = recode(cf.type, "15" = "99"),
Length = recode(Length, "0" = "1", "3" = "2"),
graded = recode(graded, "88" = "99")
)
Для замены числовых значений используйте:
library(dplyr)
d3 <- mutate(d2, profic = recode(profic, `77` = 99L),
cf.type = recode(cf.type, `15` = 99L),
Length = recode(Length, `0` =1L, `3`= 2L),
graded = recode(graded, `88`= 99L))
recode весьма специфичен в отношении типов переменных. Когда я запускаю ваш код, я получаю сообщение Warning message: Unreplaced values treated as NA as .x is not compatible. Please specify replacements exhaustively or supply .default
.
Если вы запустите glimpse(d2)
, вы увидите, что profic
, cf.type
, Length
и graded
все int
(целые числа). Вы можете указать, что число является целым числом в R, добавив L в конец, например 9L
. Сравните str(9)
и str(9L)
, первое числовое, а второе целое.
Вам также необходимо удалить кавычки только с правой стороны — если вы оставите замещающие значения в кавычках, они будут интерпретироваться как строковые литералы, а не как числа. Если вы удалите кавычки в LHS, вы получите другую ошибку, которая выходит за рамки этого ответа.
d2 <- read.csv('https://raw.githubusercontent.com/rnorouzian/m/master/v13.csv')
d3 <- mutate(d2, profic = recode(profic, "77"=99L),
cf.type = recode(cf.type, "15"=99L),
Length = recode(Length, "0"=1L, "3"=2L),
graded = recode(graded, "88"=99L)
)