Разделение столбца на несколько столбцов в R - PullRequest
0 голосов
/ 11 февраля 2020

Вот мои данные:

df1<-read.table(text= "Group
11Z-23456
12B-10000
22M-2000
12M-1100
33G-100",header=TRUE)

Я хочу получить эти данные:

A   B   C   Code
1   1   Z   23456
1   2   B   10000
2   2   M   2000
1   2   M   1100
3   3   G   100

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

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Использование `data.table:

library(data.table)
setDT(df1)
df1[, c("ABC", "Code") := tstrsplit(Group, "-")]
df1[, c("A", "B", "C") := tstrsplit(ABC, "")]
df1[, c("ABC", "Group") := NULL]
df1
#     Code A B C
# 1: 23456 1 1 Z
# 2: 10000 1 2 B
# 3:  2000 2 2 M
# 4:  1100 1 2 M
# 5:   100 3 3 G
0 голосов
/ 11 февраля 2020

Вот базовый код R, который вы можете попробовать

l <- strsplit(as.character(df1$Group),split = "-")
dfout <- setNames(data.frame(t(mapply(c, strsplit(sapply(l, `[[`,1),split = ""),lapply(l, `[[`,2)))),
                  c("A","B","C","Code"))

или использовать tidyr пакет

library(tidyr)

df1 %>% 
  separate(Group,c("X","Code"),sep = "-") %>% 
  separate(X,c("A","B","C"),sep = 1:3)

такой, что

> dfout
  A B C  Code
1 1 1 Z 23456
2 1 2 B 10000
3 2 2 M  2000
4 1 2 M  1100
5 3 3 G   100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...