Оператор ifelse в R: одно значение не может равняться другому - PullRequest
1 голос
/ 29 мая 2020

У меня есть фрейм данных с двумя столбцами: df$user и df$type. Пользователи представляют собой список различных имен пользователей, а категория типа имеет два значения: 'high_user' и 'small_user'

Я хочу создать некоторый код, чтобы один пользователь не мог быть обоими типами. Например, если user равно high_user, он также не может быть small_user.

head(df$user)

[1] RompnStomp       Vladiman         Celticdreamer54  Crimea is Russia shrek1978third   annietattooface 

head(df$type)

"high_user" "high_user" "small_user" "high_user" "high_user" "small_user"

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Вариант с base R

df$new_type <- with(df, ave(type, User, FUN = function(x) x[1]))

данными

df <- data.frame(User = c('a', 'b', 'a', 'c', 'c'), 
      type = c('high_user', 'high_user', 'small_user', 'small_user', 'high_user'))
1 голос
/ 29 мая 2020

Один из способов - присвоить первое значение User всем его значениям type.

df$new_type <- df$type[match(df$User, unique(df$User))]
df

#  User       type   new_type
#1    a  high_user  high_user
#2    b  high_user  high_user
#3    a small_user  high_user
#4    c small_user small_user
#5    c  high_user small_user

Это также можно сделать с помощью сгруппированных операций.

library(dplyr)
df %>% group_by(User) %>% mutate(new_type = first(type))

данные

df <- data.frame(User = c('a', 'b', 'a', 'c', 'c'), 
      type = c('high_user', 'high_user', 'small_user', 'small_user', 'high_user'))
...