R 对mutate中具有类似模式的列的引用

R 对mutate中具有类似模式的列的引用,r,pattern-matching,mutate,R,Pattern Matching,Mutate,我有很多专栏,像pr_1,pr_2,pr_3,。。。。我想在mutate中用ifelse 使用它们相似的模式(或索引),而不是像下面那样写入所有列名 df<- data.frame(p=c(1,2,3), pr_1=c(1,4,5), pr_2=c(0,1,6), pr_3=c(0,1,4)) df <- df %>% mutate(green=(ifelse(p < pr_1 | p < pr_2 | p < pr_3, 0 , 1))) df1)c

我有很多专栏,像pr_1,pr_2,pr_3,。。。。我想在
mutate
中用
ifelse
使用它们相似的模式(或索引),而不是像下面那样写入所有列名

df<- data.frame(p=c(1,2,3), pr_1=c(1,4,5), pr_2=c(0,1,6), pr_3=c(0,1,4))

df <- df %>% 
 mutate(green=(ifelse(p < pr_1 | p < pr_2 | p < pr_3, 0 , 1)))
df1)cur_数据在dplyr 1.0中,我们可以使用
cur_数据()
rowwise
中引用当前行。(如果只有p列,而pr列和p列排在第一位,我们可以交替使用
cur_data()[-1]
替换
select

3)c_跨我们也可以使用dplyr 1.0
c_跨
。我们已经演示了如何使用
if_else
,但是我们可以使用
+!任何(…)
如上所述

df %>%
  rowwise %>%
  mutate(green = if_else(any(p < c_across(starts_with("pr"))), 0, 1)) %>%
  ungroup
df%>%
行%>%
突变(绿色=if_else(任何(p%
解组
给予:

# A tibble: 3 x 5
      p  pr_1  pr_2  pr_3 green
  <dbl> <dbl> <dbl> <dbl> <int>
1     1     1     0     0     1
2     2     4     1     1     0
3     3     5     6     4     0
  p pr_1 pr_2 pr_3 green
1 1    1    0    0     1
2 2    4    1    1     0
3 3    5    6    4     0
# A tibble: 3 x 5
      p  pr_1  pr_2  pr_3 green
  <dbl> <dbl> <dbl> <dbl> <dbl>
1     1     1     0     0     1
2     2     4     1     1     0
3     3     5     6     4     0
#一个tible:3 x 5
p pr_1 pr_2 pr_3绿色
1     1     1     0     0     1
2     2     4     1     1     0
3     3     5     6     4     0
1)cur_数据在dplyr 1.0中,我们可以使用
cur_数据()
在行方向
中引用当前行。(如果只有p列,而pr列和p列排在第一位,我们可以交替使用
cur_data()[-1]
替换
select

3)c_跨我们也可以使用dplyr 1.0
c_跨
。我们已经演示了如何使用
if_else
,但是我们可以使用
+!任何(…)
如上所述

df %>%
  rowwise %>%
  mutate(green = if_else(any(p < c_across(starts_with("pr"))), 0, 1)) %>%
  ungroup
df%>%
行%>%
突变(绿色=if_else(任何(p%
解组
给予:

# A tibble: 3 x 5
      p  pr_1  pr_2  pr_3 green
  <dbl> <dbl> <dbl> <dbl> <int>
1     1     1     0     0     1
2     2     4     1     1     0
3     3     5     6     4     0
  p pr_1 pr_2 pr_3 green
1 1    1    0    0     1
2 2    4    1    1     0
3 3    5    6    4     0
# A tibble: 3 x 5
      p  pr_1  pr_2  pr_3 green
  <dbl> <dbl> <dbl> <dbl> <dbl>
1     1     1     0     0     1
2     2     4     1     1     0
3     3     5     6     4     0
#一个tible:3 x 5
p pr_1 pr_2 pr_3绿色
1     1     1     0     0     1
2     2     4     1     1     0
3     3     5     6     4     0

在R基中,您可以选择带有
grep
的列,将它们与
p
列进行比较,并使用
行和

cols <- grep('pr', names(df))
df$green <- +(rowSums(df$p < df[cols]) == 0)

cols在以R为底的列中,您可以选择带有
grep
的列,将它们与
p
列进行比较,并使用
行和

cols <- grep('pr', names(df))
df$green <- +(rowSums(df$p < df[cols]) == 0)

cols谢谢!在第一个解决方案中,
cur\u data
需要什么包?有没有办法在第一个解决方案中用除0和1以外的数字定义绿色变量?使用cur_data()需要dplyr 1.0或更高版本。这个版本现在应该在CRAN上。使用if_else(any(…),…)返回0和1以外的结果。请参阅(3)我们在哪里使用该样式。谢谢!在第一个解决方案中,
cur\u data
需要什么包?有没有办法在第一个解决方案中用除0和1以外的数字定义绿色变量?使用cur_data()需要dplyr 1.0或更高版本。这个版本现在应该在CRAN上。使用if_else(any(…),…)返回0和1以外的结果。请参见(3)我们在何处使用该样式。