Как объединить числовые столбцы в 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
, который удаляет исходные столбцы из фрейма данных.