Создать новый столбец на основе 4 значений в другом столбце
Я хочу создать новый столбец на основе 4 значений в другом столбце.
if col1=1 then col2= G;
if col1=2 then col2=H;
if col1=3 then col2=J;
if col1=4 then col2=K.
КАК Я ДЕЛАТЬ ЭТО В R?
Пожалуйста, мне нужен кто-то, кто поможет вам в этом. Я попытался, если /else и ifelse, но никто не работает. Благодаря
Ответы
Ответ 1
У вас есть специальный случай поиска значений, где индекс является целым числом 1: 4. Это означает, что вы можете использовать векторную индексацию для решения своей проблемы одним простым шагом.
Сначала создайте некоторые данные примера:
set.seed(1)
dat <- data.frame(col1 = sample(1:4, 10, replace = TRUE))
Затем определите значения поиска и используйте подмножество [
, чтобы найти желаемые результаты:
values <- c("G", "H", "J", "K")
dat$col2 <- values[dat$col1]
Результаты:
dat
col1 col2
1 2 H
2 2 H
3 3 J
4 4 K
5 1 G
6 4 K
7 4 K
8 3 J
9 3 J
10 1 G
В более общем плане вы можете использовать подмножество [
в сочетании с match
для решения этой проблемы:
index <- c(1, 2, 3, 4)
values <- c("G", "H", "J", "K")
dat$col2 <- values[match(dat$col1, index)]
dat
col1 col2
1 2 H
2 2 H
3 3 J
4 4 K
5 1 G
6 4 K
7 4 K
8 3 J
9 3 J
10 1 G
Ответ 2
Вы можете использовать вложенный ifelse
:
col2 <- ifelse(col1==1, "G",
ifelse(col1==2, "H",
ifelse(col1==3, "J",
ifelse(col1==4, "K",
NA )))) # all other values map to NA
В этом простом случае это излишне, но для более сложных...
Ответ 3
Существует несколько способов сделать это, но здесь один.
set.seed(357)
mydf <- data.frame(col1 = sample(1:4, 10, replace = TRUE))
mydf$col2 <- rep(NA, nrow(mydf))
mydf[mydf$col1 == 1, ][, "col2"] <- "A"
mydf[mydf$col1 == 2, ][, "col2"] <- "B"
mydf[mydf$col1 == 3, ][, "col2"] <- "C"
mydf[mydf$col1 == 4, ][, "col2"] <- "D"
col1 col2
1 1 A
2 1 A
3 2 B
4 1 A
5 3 C
6 2 B
7 4 D
8 3 C
9 4 D
10 4 D
Здесь используется car
recode
.
library(car)
mydf$col3 <- recode(mydf$col1, "1 = 'A'; 2 = 'B'; 3 = 'C'; 4 = 'D'")
Еще один из этот вопрос:
mydf$col4 <- c("A", "B", "C", "D")[mydf$col1]
Ответ 4
Вы можете посмотреть ?symnum
.
В вашем случае что-то вроде:
col2<-symnum(col1, seq(0.5, 4.5, by=1), symbols=c("G", "H", "J", "K"))
должен закрыть вас.