R 如何根据另一列中的模式从两列中选择值

R 如何根据另一列中的模式从两列中选择值,r,dataframe,conditional,R,Dataframe,Conditional,我有一个数据框,如下所示: x<-c(1,8,2,4,3,1) Y<-c(2,3,4,1,7,6) z<-c("abs_ro","xyz_be","hdh_ro","ahh_ra","dhhd_te","hdj_ro") df<-data.frame(x,y,z) x有多种方法可以做到这一点。使用base R的一种方法是假设您总是拥有x或y列的模式之一 df$value <- ifelse(gre

我有一个数据框,如下所示:


       x<-c(1,8,2,4,3,1)
        Y<-c(2,3,4,1,7,6)
        z<-c("abs_ro","xyz_be","hdh_ro","ahh_ra","dhhd_te","hdj_ro")
        df<-data.frame(x,y,z)



x有多种方法可以做到这一点。使用base R的一种方法是假设您总是拥有
x
y
列的模式之一

df$value <- ifelse(grepl("_ro$|_be$", df$z), df$x, df$y)

df
#  x y       z value
#1 1 2  abs_ro     1
#2 8 3  xyz_be     8
#3 2 4  hdh_ro     2
#4 4 1  ahh_ra     1
#5 3 7 dhhd_te     7
#6 1 6  hdj_ro     1

这可能有多种方式。使用base R的一种方法是假设您总是拥有
x
y
列的模式之一

df$value <- ifelse(grepl("_ro$|_be$", df$z), df$x, df$y)

df
#  x y       z value
#1 1 2  abs_ro     1
#2 8 3  xyz_be     8
#3 2 4  hdh_ro     2
#4 4 1  ahh_ra     1
#5 3 7 dhhd_te     7
#6 1 6  hdj_ro     1

我们可以以矢量化的方式完成这项工作,而无需依赖任何
ifelse

df$value <- df[-3][cbind(seq_len(nrow(df)), (!grepl("_(ro|be)$", df$z)) + 1)]
df$value
#[1] 1 8 2 1 7 1

df$value我们可以以矢量化的方式来实现这一点,而无需依赖任何
ifelse

df$value <- df[-3][cbind(seq_len(nrow(df)), (!grepl("_(ro|be)$", df$z)) + 1)]
df$value
#[1] 1 8 2 1 7 1
df$value