r - 我可以按列名从多列中提取值吗?

library(dplyr)
mydf <- data.frame(a_x =  c(1,2,3,4,5),
                   b_x = c(8,9,10,11,12),
                   a_y = c("k",'b','a','d','z'),
                   b_y = c('aa','bb','cc','dd','ee'),
                   prefix=c("a","b","c","a","a"))
mydf

假设我拥有的数据是 mydf,我想产生与 mydf2 相同的结果。

我用包含要提取的值的列的名称创建了一个列。 我想通过这个列提取值。

mydf2 <- data.frame(a_x=c(1,2,3,4,5),
                    b_x=c(8,9,10,11,12),
                    prefix=c("a","b","c","a","a"),
                    desired_x_value = c(1,9,NA,4,5),
                    desired_y_value = c('k','bb',NA,'d','z'))
mydf2

我已经使用了“get”和“paste0”,但它不起作用。我可以通过“dplyr”链解决这个问题吗?

mydf %>% mutate(desired_x_value = get(paste0(prefix,"_x")),
                desired_y_value = get(paste0(prefix,"_y")))

最佳答案

所以基本上您想要创建新列(desired_x_value 和 desired_y_value),其值取决于条件。使用 dplyr 我更喜欢 case_when,因为它是最好的可读方式,但您也可以使用(嵌套的)if(else) 语句。它正在做的是“如果 X 满足条件 A 执行 Y,如果 X 满足条件 B 执行 Z,如果 X 满足条件 .... 执行 ...”

mydf %>% 
  dplyr::mutate(
    desired_x_value = case_when(
      prefix == "a" ~ a_x,
      prefix == "b" ~ b_x,
    desired_y_values = case_when(
      prefix == "a" ~a_y,
      prefix == "b" ~b_y,
      TRUE ~ NA_character_ ))

如果需要,您可以在第二步中删除不再需要的列。上面的代码结果在表中:

 a_x b_x a_y b_y prefix desired_x_value desired_y_values
1   1   8   k  aa      a               1                k
2   2   9   b  bb      b               9               bb
3   3  10   a  cc      c              NA             <NA>
4   4  11   d  dd      a               4                d
5   5  12   z  ee      a               5                z 

https://stackoverflow.com/questions/67368179/

相关文章:

reactjs - 属性 'type' 在类型中缺失。但在类型 'Props' 中是必需的

amazon-ec2 - Tensorflow 安装在 AWS ec2 实例上终止

c++ - 如何在 cpp 中为 std::unordered_map 编写自定义 hash_

flutter - 类型错误 : Cannot read property 'isSupported

c++ - 我可以在没有默认初始化的情况下初始化数组的 std::unique_ptr (我只想让它

javascript - 获取随机用户 API

node.js - 如何从 bull js 中删除延迟的工作?

typescript - typescript 上的 Socket.io 附加属性不存在

git - 无法访问 'https://github.com/Homebrew/brew/' : L

ruby - "+1"给我的结果与 ruby​​ 中的 "+ 1"不同?