Вы также можете рассмотреть возможность использования transform()
для решения таких проблем перекодирования, как эта.transform()
будет работать медленнее, чем метод логического индексирования, но его легче переварить суть кода.Хорошее обсуждение плюсов и минусов различных методов можно найти здесь .Обратите внимание:
set.seed(42)
df <- data.frame("first" = sample(1:5, 10e5, TRUE), "second" = sample(4:8, 10e5, TRUE))
df <- transform(df
, test = ifelse(first %in% 1:3 & second == 4, 1
, ifelse(first %in% 1:3 & second == 5, 2
, ifelse(first %in% 1:3 & second == 6, 3, NA)))
)
Во-вторых, имена столбцов 1st
и 2nd
не являются синтаксически допустимыми именами столбцов.Посмотрите на make.names()
для более подробной информации о том, что составляет допустимые имена столбцов.При работе с data.frame
вы можете использовать / злоупотреблять аргументом check.names
.Например:
> df <- data.frame("1st" = sample(1:5, 10e5, TRUE), "2nd" = sample(4:8, 10e5, TRUE), check.names = FALSE)
> colnames(df)
[1] "1st" "2nd"
> df <- data.frame("1st" = sample(1:5, 10e5, TRUE), "2nd" = sample(4:8, 10e5, TRUE), check.names = TRUE)
> colnames(df)
[1] "X1st" "X2nd"