我有很多数据,但我会尽量简化它,这也在R中完成。假设我有两个变量X和Y:
X Y
100 101
200 199
300 301
我现在想把这两个变量组合起来,但在分隔符"0"之前使用两个变量的最低值_&";。它应该是这样的:
X Y Z
100 101 100_101
200 199 199_200
300 301 300_301
试试这个:
library(dplyr)
dt <- dt %>% rowwise() %>% mutate(z = paste(min(x,y),max(x,y),sep="_"))
我们可以使用pmin/pmap
(它是矢量化的,非常有效(按元素排序,然后使用paste
在base R
中创建新变量"Z">
df1$Z <- with(df1, paste(pmin(X, Y), pmax(X, Y), sep="_"))
另一个有效的选项是dapply
从collapse
循环在行上(MARGIN = 1
(,然后sort
逐行和paste
元素
library(collapse)
df1$Z <- dapply(df1, function(x) paste(sort(x), collapse="_"), MARGIN = 1)
或使用base R
中的apply
df1$Z <- apply(df1, 1, function(x) paste(sort(x), collapse="_"))
数据
df1 <- structure(list(X = c(100L, 200L, 300L),
Y = c(101L, 199L, 301L
)), class = "data.frame", row.names = c(NA, -3L))