【问题标题】:Mutating chosen columns in the data.frame or tibble with dplyr package R使用 dplyr 包 R 改变 data.frame 或 tibble 中的选定列
【发布时间】:2019-03-06 19:28:24
【问题描述】:

我想一次将mutate 函数应用于多个列。这些列以某些字符串开头,这就是它们应该被识别的方式。我还想知道解决方案如何将其应用于由索引标记的列,即。 data_fake[3:4]。目标是删除所有非数字字符并将值转换为数字。不能让它悲伤地工作。代码末尾给出了所需的结果。非常感谢。

data_fake <- data.frame(c("1","2","NA","3,","2","1 only"),c(1,2,3,4,5,6),
                        c("23","3 bundles","4","5","NA","1"), c("3","5 packs","6","78","7","8"))
colnames(data_fake) <- c("AB foo ab", "AB foo bc", "CD foo ab","CD foo bc")

data_fake <- as_tibble(data_fake)

data_fake %>%
        select(starts_with("CD foo")) %>% 
        mutate(as.numeric(gsub("[^0-9]", "")))

data_fake_results <- as_tibble(data.frame(c("1","2","NA","3,","2","1 only"),c(1,2,3,4,5,6),
                        c(23,3,4,5,NA,1), c(3,5,6,78,7,8)))

【问题讨论】:

  • ?mutate_if。你需要给gsub三个参数,patternreplacementx要查看的字符串。
  • 在我标记为重复的帖子中,一些答案已经过时,但this one 使用当前的dplyr 选择器

标签: r dataframe dplyr


【解决方案1】:

我们可以使用mutate_at

library(tidyverse)
data_fake %>%
    mutate_at(vars(3:4), funs(as.numeric(str_remove(., "\\s+[a-z]+"))))

或使用parse_number

data_fake %>%
     mutate_at(3:4, parse_number)

如果我们要匹配mutate_at中的列名

data_fake %>% 
    mutate_at(vars(starts_with("CD")), parse_number)

【讨论】:

  • 太棒了!以及如何做完全相同的事情,但按标题选择列(这里它们应该以“CD foo”开头)?
  • @MIH mutate_at(vars(starts_with("CD"))
  • @MIH 您可以在?select 中找到所有用于指定列的函数。 mutatetransmuterename 等的作用域 (*_at) 版本使用与 select 相同的指定函数
猜你喜欢
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多