繁体   English   中英

如何连接R中的数字列?

[英]How to concatenate numeric columns in R?

我在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中必须有一些非常简单/简单的方法来实现这一点,但在过去的几天里,我一直在使用Google搜索和查看Stack Overflow并没有引起我的注意。 我需要的只是xyz列是唯一的,所以我可以运行固定效应回归,(x范围从1:4,y从1:4和z 1:10)所以我有160种可能的组合。 目前我在x,y和z值上使用不同的指数,然后将它们相乘以获得唯一值 - 当然有更好的方法! 谢谢

例如:

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 ,它从数据框中删除原始列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM