dplyr 0.5.0使用列索引进行mutate

时间:2017-07-13 16:58:24

标签: r dplyr

我已经更新了dplyr(现在为0.7.1)并且我的许多旧代码都不起作用,因为mutate_each已被弃用。我用mutate_each使用列索引来做这样的事情(下面的代码)。我在数百列上做了这个。我只是无法弄清楚如何正确使用vars参数与mutate_at。我见过的所有例子都使用了列名...我不想这样做。我确定这是一个简单的答案,但我花了太多时间试图弄明白,并非常感谢一些帮助。

export default class CheckboxInput extends Component {
  render() {
    return (
      <div>
        <h1>{this.props.readableSelectedCheckboxes}</h1>

        <div className="checkbox-container">
          {this.props.options.map((value) => {
            return (
              <div className="form-group filter-input" key={lowercaseValue}>
                <input
                  type="checkbox"
                  id={checkboxId}
                  name={inputId}
                  value={lowercaseValue}
                  onChange={this.props.handleCheckboxChange}
                />
                <label htmlFor={checkboxId} className="form-control">{value}</label>
              </div>
            );
          })}
        </div>
      </div>
    );
  }
}

如果我尝试:

data<-data.frame(numbers=1:10, morenumbers=11:20)
change<-function(x) ifelse(x>10, 1, 2)
newdata<-data%>%mutate_each(funs(change), 1:2)

甚至这个:

newdata<-data%>%mutate_at(funs(change), vars(1:2))

我收到以下错误

newdata<-data%>%mutate_at(funs(change), vars(numbers, morenumbers))     

1 个答案:

答案 0 :(得分:6)

mutate_at的新原型是:

mutate_at(.tbl, .vars, .funs, ..., .cols = NULL)

请注意,.vars现在是第一个参数。因此,您可以明确指定.vars或更改订单。

newdata <- data %>% mutate_at(funs(change), .vars = vars(1:2))
# OR
newdata <- data %>% mutate_at(vars(1:2), funs(change))

   numbers morenumbers
1        2           1
2        2           1
3        2           1
4        2           1
5        2           1
6        2           1
7        2           1
8        2           1
9        2           1
10       2           1