![](/img/trans.png)
[英]In R, concatenate numeric columns into a string while inserting some text elements
[英]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.