Конкатенация по строкам между конкретными столбцами данных
42054 просмотра
3 ответа
У меня есть фрейм данных со столбцами, который при объединении (по строкам) в виде строки позволил бы мне разбить фрейм данных в желаемой форме.
> str(data)
'data.frame': 680420 obs. of 10 variables:
$ A : chr "2011-01-26" "2011-01-26" "2011-02-09" "2011-02-09" ...
$ B : chr "2011-01-26" "2011-01-27" "2011-02-09" "2011-02-10" ...
$ C : chr "2011-01-26" "2011-01-26" "2011-02-09" "2011-02-09" ...
$ D : chr "AAA" "AAA" "BCB" "CCC" ...
$ E : chr "A00001" "A00002" "B00002" "B00001" ...
$ F : int 9 9 37 37 37 37 191 191 191 191 ...
$ G : int NA NA NA NA NA NA NA NA NA NA ...
$ H : int 4 4 4 4 4 4 4 4 4 4 ...
Для каждой строки я хотел бы объединить данные в столбцах F, E, D и C в строку (с символом подчеркивания в качестве разделителя). Ниже моя неудачная попытка этого:
data$id <- sapply(as.data.frame(cbind(data$F,data$E,data$D,data$C)), paste, sep="_")
И ниже - нежелательный результат:
> str(data)
'data.frame': 680420 obs. of 10 variables:
$ A : chr "2011-01-26" "2011-01-26" "2011-02-09" "2011-02-09" ...
$ B : chr "2011-01-26" "2011-01-27" "2011-02-09" "2011-02-10" ...
$ C : chr "2011-01-26" "2011-01-26" "2011-02-09" "2011-02-09" ...
$ D : chr "AAA" "AAA" "BCB" "CCC" ...
$ E : chr "A00001" "A00002" "B00002" "B00001" ...
$ F : int 9 9 37 37 37 37 191 191 191 191 ...
$ G : int NA NA NA NA NA NA NA NA NA NA ...
$ H : int 4 4 4 4 4 4 4 4 4 4 ...
$ id : chr [1:680420, 1:4] "9" "9" "37" "37" ...
..- attr(*, "dimnames")=List of 2
.. ..$ : NULL
.. ..$ : chr "V1" "V2" "V3" "V4"
Любая помощь будет принята с благодарностью.
Автор: Jubbles Источник Размещён: 08.07.2019 06:06Ответы (3)
48 плюса
Пытаться
data$id <- paste(data$F, data$E, data$D, data$C, sep="_")
вместо. Прелесть векторизованного кода в том, что вам не нужны построчные циклы или эквивалентные циклам * применения функции.
Редактировать Еще лучше
data <- within(data, id <- paste(F, E, D, C, sep=""))
Автор: Dirk Eddelbuettel
Размещён: 10.06.2011 03:58
7 плюса
Использование unite
в tidyr
упаковке:
require(tidyr)
data <- data %>% unite(id, F, E, D, C, sep = '_')
Первый параметр - это желаемое имя, все следующие до sep
- столбцы для объединения.
5 плюса
Либо stringr::str_c()
или paste()
будет работать.
require(stringr)
data <- within(data, str_c(F,E,D,C, sep="_")
или еще
data <- within(data, paste(F,E,D,C, sep="_")
( stringr
лучшая производительность на больших наборах данных)
Вопросы из категории :
- r Как получить доступ к последнему значению в векторе?
- r Пакеты оптимизации для R
- r Есть ли у R такие операторские операции, как Perl qw ()?
- r Библиотека / инструмент для рисования тройных / треугольных графиков
- apply Примените функцию к каждой строке матрицы или фрейма данных
- apply apply () и вычисление пропорции первой строки для всех строк данных
- apply Сортировка строк по алфавиту
- apply Конкатенация по строкам между конкретными столбцами данных
- paste Подсветка синтаксиса при вставке в электронные письма
- paste Вставьте два текстовых списка (один список файла) в один список, разделенный точкой с запятой
- paste Клавиша Shift, имеющая проблемы
- string-concatenation Как объединить текст из нескольких строк в одну текстовую строку на сервере SQL?
- string-concatenation Использование LINQ для конкатенации строк
- string-concatenation Как использовать GROUP BY для объединения строк в SQL Server?
- string-concatenation Конкатенация строк и подстановка строк в Python
- sapply Функции группировки (tapply, by, aggregate) и семейство * apply
- sapply Использование "..." и "копия"