Как изменить уникальные значения строк в другой набор уникальных значений строк во фрейме данных в R? - PullRequest
1 голос
/ 18 февраля 2020

У меня есть фрейм данных с экспериментальными результатами, полученными от участников, которые прошли мой тест онлайн. В файле данных каждый уникальный участник идентифицируется случайным образом сгенерированным кодом, предоставленным им в конце эксперимента. Поскольку идентифицировать каждого человека по случайному коду, похожему на gibberi sh, неудобно, я хотел бы заменить эти коды на удобочитаемые метки, такие как Participant_1, Participant_2, et c.

Так что я думаю, что мне нужен кусок кода, который идентифицирует каждый уникальный случайный код в файле данных и заменяет их метками участников один за другим. Но я не мог понять это, и любая помощь будет высоко ценится.

Вот фрагмент кода, который показывает результат, который я имею, и результат, который я хочу. Обратите внимание, что каждый участник ответил на разное количество вопросов, так что это не может быть простым способом их анализа.

Participant_Identifiers <- c(rep("QHDKWEFHWKHFFH", 4), rep("WHWIHFJNWFKWF", 7), rep("HEIFFFBBKQLSD", 3))

Participant_Scores <- c(20, 30, 59, 20, 47, 84, 21, 90,54,78,90,97)

df <- data.frame("Participant_Identifiers" = c(rep("QHDKWEFHWKHFFH", 4), rep("WHWIHFJNWFKWF", 7), rep("HEIFFFBBKQLSD", 3)), 
                  "Participant_Scores" = c(20, 30, 59, 20, 47, 84, 21, 90,54,78,90,97, 35, 67))

df

df_I_want <- data.frame("Participant_Identifiers" = c(rep("Participant_1", 4), rep("Participant_2", 7), rep("Participant_3", 3)), 
                       "Participant_Scores" = c(20, 30, 59, 20, 47, 84, 21, 90,54,78,90,97, 35, 67))

df_I_want

Ответы [ 2 ]

2 голосов
/ 18 февраля 2020

Вы можете использовать match с unique

df$new_col <- paste0("Participant_", match(df$Participant_Identifiers, 
                                     unique(df$Participant_Identifiers)))

Или, поскольку Participant_Identifiers является фактором, вы можете преобразовать их в целое число

df$new_col <- paste0("Participant_", as.integer(df$Participant_Identifiers))
2 голосов
/ 18 февраля 2020

Вот что вы можете сделать:

# example 
ano <- replicate(5, paste(letters[sample(1:25, 12, replace = TRUE)], collapse = ""))
df <- data.frame(pat = sample(ano, 15, replace = TRUE), var = runif(15), 
  stringsAsFactors = FALSE )

# 1. create another data frame with the id you want 
patu <- unique(df$pat)
df_id <- data.frame(pat = patu, id = paste0("Participant_", seq_along(patu)))

# 2. merge with your df 
res <- merge(df, df_id)  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...