создать строку из первых 2 элементов в кадре данных и добавить в новый столбец в R - PullRequest
0 голосов
/ 09 февраля 2020

Я думаю, что это довольно просто, скажем, у меня есть фрейм данных

> vadata 
    va1 va2
1   a   c
2   b   d

Я хочу создать новый столбец va3 = "a- c" и "bd" для всех строк в vadata и добавить в vadata?

vadata имеет тип dataframe.

Есть ли способ сделать это в r?

Ответы [ 4 ]

1 голос
/ 09 февраля 2020

Вы можете использовать mutate () из библиотеки dplyr .

library(dplyr)
vadata = vadata %>% mutate(va3 = paste(va1,va2, sep='-'))
vadata

  va1 va2 va3
1   a   c a-c
2   b   d b-d

Используя mutate (), вы можете одновременно создавать несколько столбцов. Например:

vadata = vadata %>% mutate(va3 = paste(va1,va2, sep='-'),
                           va4 = paste(va3,va2, sep='-))
1 голос
/ 09 февраля 2020

Вы можете попробовать следующий базовый код R, который применяется к любому количеству столбцов

vadataout <- cbind(vadata,matrix(paste(vadata[,1],as.matrix(vadata[-1]),sep = "-"),nrow = nrow(vadata)))

Пример

vadata <- data.frame(matrix(1:60,nrow = 2))

> vadata
  X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30
1  1  3  5  7  9 11 13 15 17  19  21  23  25  27  29  31  33  35  37  39  41  43  45  47  49  51  53  55  57  59
2  2  4  6  8 10 12 14 16 18  20  22  24  26  28  30  32  34  36  38  40  42  44  46  48  50  52  54  56  58  60

, и вы получите

> vadataout
  X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30   1   2   3    4    5    6    7
1  1  3  5  7  9 11 13 15 17  19  21  23  25  27  29  31  33  35  37  39  41  43  45  47  49  51  53  55  57  59 1-3 1-5 1-7  1-9 1-11 1-13 1-15
2  2  4  6  8 10 12 14 16 18  20  22  24  26  28  30  32  34  36  38  40  42  44  46  48  50  52  54  56  58  60 2-4 2-6 2-8 2-10 2-12 2-14 2-16
     8    9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29
1 1-17 1-19 1-21 1-23 1-25 1-27 1-29 1-31 1-33 1-35 1-37 1-39 1-41 1-43 1-45 1-47 1-49 1-51 1-53 1-55 1-57 1-59
2 2-18 2-20 2-22 2-24 2-26 2-28 2-30 2-32 2-34 2-36 2-38 2-40 2-42 2-44 2-46 2-48 2-50 2-52 2-54 2-56 2-58 2-60
1 голос
/ 09 февраля 2020

Вы можете использовать paste для этого.

vadata$va3 <- paste(vadata$va1,vadata$va2,sep="-")
0 голосов
/ 10 февраля 2020

, поскольку я делаю 35 категорий, я обнаружил, что итерация по a для l oop в каждой строке nrow () была самым простым и легким решением, которое работает в базе R.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...