r语言 - 组合来自 dplyr 的"mutate"和"across"以及来自纵梁的函数



问题陈述

我有一个表,其中一些列以要删除的字符串开头。我试着通过使用新的";横跨";dplyr的功能,以及stringr的操作字符串的功能,但我失败了(这就是我在这里的原因!(。

示例代码

library(tidyverse)
# Generate a short mock-up table
set.seed(1)
mockup <- tibble(n_col1 = sample(1:10, 5, FALSE),
v_col2 = sample(letters, 5, FALSE),
col3 = sample(10:20, 5, TRUE),
col4 = sample(LETTERS, 5, FALSE)) # More columns beginning with "n_", "v_" or nothing
# Remove the "n_" or "v_" strings from the column names
# This is as far as my skills go...
mockup <- mockup %>% mutate(across(starts_with(c("n_", "v_")), str_remove))

问题

有什么想法可以用我的方式或不同的方式,以一种简短高效的方式做到这一点吗?

across用于操作列中的值,而不是列名。您可以使用新的rename_with来重命名列。

library(dplyr)
mockup %>%  rename_with(~sub('^(n|v)_', '', .))
#rename_all in old dplyr
#mockup %>%  rename_all(~sub('^(n|v)_', '', .))
#   col1 col2   col3 col4 
#  <int> <chr> <int> <chr>
#1     9 w        10 N    
#2     4 k        14 J    
#3     7 n        14 G    
#4     1 r        19 I    
#5     2 s        15 O    

或者在基本R:中执行此操作

names(mockup) <- sub('^(n|v)_', '', names(mockup))

我们可以将str_removedplyr一起使用

library(dplyr)
library(stringr)
mockup %>%
rename_with(~ str_remove(., '^[nv]_'))
# A tibble: 5 x 4
#   col1 col2   col3 col4 
#  <int> <chr> <int> <chr>
#1     9 w        10 N    
#2     4 k        14 J    
#3     7 n        14 G    
#4     1 r        19 I    
#5     2 s        15 O   

最新更新