如何在R中的原始变量的基础上,将两个数值变量组合起来,首先创建一个值最低的新变量



我有很多数据,但我会尽量简化它,这也在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(它是矢量化的,非常有效(按元素排序,然后使用pastebase R中创建新变量"Z">

df1$Z <- with(df1, paste(pmin(X, Y), pmax(X, Y), sep="_"))

另一个有效的选项是dapplycollapse循环在行上(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))

相关内容

最新更新