我在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值上使用不同的指数,然后将它们相乘以获得唯一值 - 当然,这是更好的方法!感谢
答案 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
,它将从数据框中删除原始列。