r - 以列名中的字符串为条件,从现有列中变异一个新列并粘贴值

标签 r tidyverse string-matching dplyr

我有这个数据框:

df <- structure(list(number = 1:3, a_1 = c(1L, 4L, 7L), a_2 = c(2L, 
5L, 8L), a_3 = c(3L, 6L, 9L)), class = "data.frame", row.names = c(NA, 
-3L))

  number a_1 a_2 a_3
1      1   1   2   3
2      2   4   5   6
3      3   7   8   9

我想改变一个 new_col 并用以列 number 到列名的字符串匹配为条件的值填充它。

期望的输出:

  number   a_1   a_2   a_3 new_col
   <int> <int> <int> <int>   <int>
1      1     1     2     3       1
2      2     4     5     6       5
3      3     7     8     9       9

我尝试使用 str_extractstr_detect ...但我做不到!

最佳答案

或者使用一些pivot_*:

library(tidyr)
library(dplyr)

df %>% 
  pivot_longer(-number, names_pattern = "a_(\\d+)") %>% 
  group_by(number) %>% 
  mutate(new_col = value[name == number]) %>% 
  pivot_wider(names_from = name, names_prefix = "a_") %>% 
  ungroup()

返回

# A tibble: 3 x 5
  number new_col   a_1   a_2   a_3
   <int>   <int> <int> <int> <int>
1      1       1     1     2     3
2      2       5     4     5     6
3      3       9     7     8     9

关于r - 以列名中的字符串为条件,从现有列中变异一个新列并粘贴值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68914687/

相关文章:

r - 在geom_text中, "labels=scales::percent"可以四舍五入吗?

r - 为什么 one_of() 被称为?

r - 如何将具有不同数据类型的嵌套列表转换为数据框?

vba - 在一个单元格内查找具有不同字符串的匹配单元格

用于检查 IP 地址的 javascript 正则表达式

r - 如何调整重叠{siar}中的椭圆重叠计算以匹配ggbiplot中的正态概率椭圆体?

r - 关于 R 中 set.seed() 的问题

R将数字转换为时间

r - 如何使用 dplyr 合并汇总频率表

php - 与 mysql DB 匹配单词列表的前缀