разбиение и переименование повторяющихся столбцов во фрейме данных в R - PullRequest
0 голосов
/ 01 июня 2018

Я очень плохо знаком с R и работаю над приведением в порядок набора данных.У меня есть большое количество столбцов, где некоторые столбцы (в файле .CSV) содержат несколько разделенных запятыми имен.Например, мне нужно разделить и продублировать столбец и присвоить каждому столбцу имена, разделенные запятыми:

enter image description here

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

enter image description here

Я активно изучаю, как это сделать, но все равно не повезло.Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 01 июня 2018

Вот один из способов:

Сначала давайте создадим фиктивные данные примера, используя data.table::fread

library(data.table)    
dt = fread(
"a b c,d e f,g,h
1 2 3 4 5
1 2 3 4 5", sep=' ')
#   a b c,d e f,g,h
#1: 1 2   3 4     5
#2: 1 2   3 4     5

cols = names(dt)

Теперь мы используем stringr для подсчета вхождений запятых в именах и добавлениястолбцы соответственно.Мы используем повторное использование в операторе matrix, чтобы заполнить новые смежные столбцы одинаковыми значениями

library(stringr)
dt.new = dt[, lapply(cols, function(x) matrix(get(x), NROW(dt), str_count(x, ',')+1L))] 
names(dt.new) <- unlist(strsplit(cols, ','))
dt.new
#    a b c d e f g h
# 1: 1 2 3 3 4 5 5 5
# 2: 1 2 3 3 4 5 5 5

Аналогично, если вы предпочитаете использовать базовую data.frame вместо data.table, мы можем вместо этого сделать

dt.new = data.frame(lapply(cols, function(x) matrix(dt[[x]], NROW(dt), str_count(x,',')+1L)))
names(dt.new) <- unlist(strsplit(cols, ','))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...