добавить новый столбец условно на другой символьный столбец в R - PullRequest
0 голосов
/ 26 марта 2020

Я пытался создать процедуру в R. Я хочу добавить новый столбец на основе нескольких категорий другого столбца. Я поставил пример:

Column     New Column 
A              1
B              2
C              3
D              4
D              4
A              1

Мой вопрос заключается в том, как добавить этот новый столбец с определенной базой значений на значения (в символах) первого столбца.

Это действительно похоже на использование функций MUTATE и CASE_WHEN. Проблема в том, что эта функция просто учитывает значения чисел c, и в этом случае я хочу взять символы (категории) и на основе этого дать конкретное значение c новому столбцу.

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Предполагая, что у вас есть столбец категорий (не только буквы), вы можете преобразовать его в «упорядоченные факторы», чтобы упорядочить категории, а затем преобразовать в целые числа.

x <- c("A", "B", "C", "D", "D", "A")
# make the dataframe 
v <- data.frame(x, as.integer(as.ordered(x)))
# 
colnames(v) <- c("Column", "New Column")
v
# output
> v
  Column New Column
1      A          1
2      B          2
3      C          3
4      D          4
5      D          4
6      A          1
0 голосов
/ 27 марта 2020

Если я вас правильно понимаю, вы хотите создать новый столбец, в котором номера соответствуют буквам, где 1 соответствует первой букве алфавита A, 2 соответствует B, 3 соответствует C и т. Д. Если это предположение верно, то этот код будет работать для вас:

ИЛЛЮСТРАТИВНЫЕ ДАННЫЕ

set.seed(12)
df <- data.frame(
  Column = sample(LETTERS[1:5],10, replace = T)
)
df
   Column
1       A
2       E
3       E
4       B
5       A
6       A
7       A
8       D
9       A
10      A

РЕШЕНИЕ : назначьте индексы LETTERS, которая представляет собой упорядоченную последовательность целых чисел, начинающуюся с 1, до букв в df$COlumn, где они соответствуют буквам в LETTERS:

df$Newcolumn <- seq(LETTERS)[match(df$Column, LETTERS)]

RESULt :

df
   Column Newcolumn
1       A         1
2       E         5
3       E         5
4       B         2
5       A         1
6       A         1
7       A         1
8       D         4
9       A         1
10      A         1
...