【问题标题】:dplyr on subset of columns while keeping the rest of the data.framedplyr 在列子集上,同时保留 data.frame 的其余部分
【发布时间】:2015-06-25 15:34:08
【问题描述】:

我正在尝试使用 dplyr 将函数应用于列的子集。但是,与下面的代码相比,我试图在将所有列保留在数据框中的同时实现这一点。目前,生成的数据框仅保留选定的列。我可以使用 remove-and-cbind 构造将这些列合并回原始数据框,但我想知道是否有办法直接在 dplyr 中执行此操作?我试图将 select 函数移到 mutate 函数中,但还不能完成。

require(dplyr)
Replace15=function(x){ifelse(x<1.5,1,x)}
dg <- iris %>%
  dplyr::select(starts_with("Petal")) %>%
  mutate_each(funs(Replace15))  
dg

> dg
Source: local data frame [150 x 2]

   Petal.Length Petal.Width
1           1.0           1
2           1.0           1
3           1.0           1
4           1.5           1
5           1.0           1
6           1.7           1
7           1.0           1
8           1.5           1
9           1.0           1
10          1.5           1

【问题讨论】:

  • 也许只是iris %&gt;% mutate_each(funs(Replace15), starts_with("Petal"))
  • 您还可以根据内置的replace 函数来定义您的函数。 ifelse 可能会很慢,如果您担心的话。 stackoverflow.com/q/16275149/1191259

标签: r dplyr


【解决方案1】:
dg <- iris %>% mutate_each(funs(Replace15), matches("^Petal"))

或者(由@aosmith 发布)您可以使用starts_with。查看?select 以了解selectsummarise_eachmutate_each. 中可用的其他特殊功能

【讨论】:

    【解决方案2】:

    mutate_each is now deprecated,替换为mutate_ifmutate_at。使用这些替换,答案是

    dg <- iris %>% mutate_at(vars(starts_with("Petal")), funs(Replace15))
    

    【讨论】:

      猜你喜欢
      • 2022-12-10
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 2022-01-09
      • 2017-10-22
      相关资源
      最近更新 更多