Как объединить числовые столбцы в R?

У меня есть три столбца координат x, y и z в кадре данных в R, которые я хотел бы объединить в одно значение xyz, как показано ниже. Я пробовал "вставить" с "collapse" ="" и sep="", но у меня возникли проблемы, я думаю, что это связано с текстовыми и числовыми переменными.

I have:
x y z 
1 2 3 
2 3 2 
3 1 4 
4 2 1 

I want:
x y z xyz
1 2 3 123
2 3 2 232
3 1 4 314
4 2 1 421

Должен быть какой-то чрезвычайно простой / простой способ сделать это в R, но я последние два дня гуглюл и просматривал Stack Overflow время от времени, и ничто не привлекло мое внимание. Все, что мне нужно, это уникальный столбец xyz, чтобы я мог запускать регрессии с фиксированными эффектами (x колеблется от 1:4, y от 1: 4 и z 1:10), поэтому у меня есть 160 возможных комбинаций. В настоящее время я использую разные показатели для значений x, y и z, а затем умножаю их для получения уникальных значений - несомненно, есть лучший способ! Спасибо

3 ответа

Решение

Например:

transform(df,xyz=paste0(x,y,z))
  x y z xyz
1 1 2 3 123
2 2 3 2 232
3 3 1 4 314
4 4 2 1 421

Или используя interaction:

transform(df,xyz=interaction(x,y,z,sep=''))
  x y z xyz
1 1 2 3 123
2 2 3 2 232
3 3 1 4 314
4 4 2 1 421

`

df$NewCol <- do.call(paste, c(df[c("x", "y", "z")], sep = ""))

Два других варианта объединения столбцов dplyr::mutate() а также tidyr::unite():

df <- read.table(text = 'x y z 
                 1 2 3 
                 2 3 2 
                 3 1 4 
                 4 2 1', header = T)

library(dplyr)

df %>%
  mutate(xyz_char = paste0(x, y, z)) %>%           
  mutate(xyz_num = as.numeric(paste0(x, y, z)))

Обратите внимание, что с помощью paste() преобразует числовые значения в символ Вам нужно обернуть его as.numeric() сохранить поле как числовое значение, если это то, что вам нужно.

library(tidyr)

df %>% 
  unite(xyz, x:z, sep = '', remove = FALSE)

Аргумент по умолчанию в tidy::unite() является remove = TRUE, который удаляет исходные столбцы из фрейма данных.

Другие вопросы по тегам