我有一个带有两个字符向量的数据帧:
data.frame(
matPA = c("PA66", "SB3", "PA66GF", "PA66", "SB2"),
matSB = c("SB1", "PA66", "SB1", "SB2", "PA66GF")
)
我希望在右列中有正确的字符,例如PA66&PA66GF到matPA和SB2&3至matSB:
data.frame(
matPA = c("PA66", "PA66", "PA66GF", "PA66", "PA66GF"),
matSB = c("SB1", "SB3", "SB1", "SB2", "SB2")
)
非常感谢。
d <- data.frame(
matPA = c("PA66", "SB3", "PA66GF", "PA66", "SB2"),
matSB = c("SB1", "PA66", "SB1", "SB2", "PA66GF")
)
library(dplyr)
d2 <- apply( d, 1, function(r) {
r[ order( grepl("^SB",r)) ]
}) %>% t %>% as.data.frame %>% setNames( names(d) )
也许是这样。
您可以使用pmin
/pmax
:
df <- transform(df, matPA = pmin(matPA, matSB), matSB = pmax(matPA, matSB))
df
# matPA matSB
#1 PA66 SB1
#2 PA66 SB3
#3 PA66GF SB1
#4 PA66 SB2
#5 PA66GF SB2