Как создать столбец с двоичной переменной, которая указывает, имеет ли другой столбец определенные факторы?

Я хочу создать столбец двоичной переменной, который показывает, просто указывает, равен ли существующий столбец R или P. Если он равен, я бы хотел, чтобы новый столбец читал 1, и если есть пустое наблюдение, я хотел бы, чтобы он читал 0.

Я хотел бы это:

Person    Play       Key  
A           1         R
B           2         P
C           3         
D           4         R
E           5          

Чтобы стать этим:

Person    Play       Key      Indicator
A           1         R           1
B           2         P           1 
C           3                     0
D           4         R           1
E           5                     0

Я пытался:

df$Indicator <- (df$Key == 'R' | 'P')

Но это не работает. получаю ошибку Error in df$Indicator <- (df$Key == 'R' | 'P')" : operations are possible only for numeric, logical or complex types

Кроме того, я не уверен, что это обеспечит бинарный индикатор, который я ищу.


person rogues77    schedule 05.10.2020    source источник


Ответы (1)


Попробуйте любой из этих подходов. Вы были почти близки, так как использовали такой код, как df$Indicator <- (df$Key == 'R' | 'P'), но правильной формой будет df$Indicator <- df$Key == 'R' | df$Key =='P'. Это создаст значения TRUE/FALSE, поэтому вы можете использовать as.numeric(), чтобы сделать их 0/1. Вот код:

#Code 1
df$Indicator <- as.numeric(df$Key %in% c('R','P'))
#Code 2
df$Indicator <- as.numeric(df$Key == 'R' | df$Key== 'P')

Выход:

  Person Play Key Indicator
1      A    1   R         1
2      B    2   P         1
3      C    3             0
4      D    4   R         1
5      E    5             0

Некоторые используемые данные:

#Data
df <- structure(list(Person = c("A", "B", "C", "D", "E"), Play = 1:5, 
    Key = c("R", "P", "", "R", "")), row.names = c(NA, -5L), class = "data.frame")

Другим вариантом может быть (Все кредиты @ChuckP):

#Code3
df$indicator <- ifelse(df$Key == 'R' | df$Key== 'P', 1, 0)

Что даст тот же результат.

person Duck    schedule 05.10.2020
comment
Пока ты даешь деньги @Duck, не забывай старый добрый df$indicator <- ifelse(df$Key == 'R' | df$Key== 'P', 1, 0) ` - person Chuck P; 05.10.2020
comment
@ChuckP Вы правы, я добавлю этот код в ответ! Отличное предложение! - person Duck; 05.10.2020