如何连接R中的数字列?

时间:2014-06-16 16:14:12

标签: r concatenation

我在R的数据框中有三列x,y和z坐标,我想将它们连接成一个xyz值,如下所示。我试过贴了'与'崩溃' =""和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 个答案:

答案 0 :(得分:6)

例如:

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

`

答案 1 :(得分:4)

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

答案 2 :(得分:0)

用于合并列的其他两个选项是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,它将从数据框中删除原始列。