我有一个汇率数据框。我想划分以“比率”开头的任何列。通过“ rates.AUD”列。
df <- structure(list(timestamp = c(1490659199L, 1490745599L, 1490831999L,
1490918399L, 1491004766L, 1491091173L, 1491177598L, 1491263999L,
1491350399L, 1491436799L), rates.USD = c(1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L), rates.AUD = c(1.311019, 1.306745, 1.303737,
1.306658, 1.31053, 1.31053, 1.310702, 1.314962, 1.321414, 1.321726
), rates.EUR = c(0.920726, 0.924523, 0.929473, 0.935651, 0.937734,
0.937734, 0.937251, 0.937221, 0.936495, 0.937035)), .Names = c("timestamp",
"rates.USD", "rates.AUD", "rates.EUR"), row.names = c(NA, 10L
), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
我尝试了以下
library(tidyverse)
result <- df %>% mutate_at(vars(starts_with("rates.")), funs(./rates.AUD))
Run Code Online (Sandbox Code Playgroud)
但这并未将函数应用于以“ rates”开头的所有列。rate.USD和rate.AUD发生变化,但rate.EUR保持不变。
我有点困惑,帮助表示赞赏。
我有同样的问题,并不能弄明白,甚至张贴作为对dplyr GH回购的问题在这里。响应非常有帮助,将为您效劳。问题的摘要是,rate.AUD在逐个遍历data.frame时会被自身除以,而在mutate将rate.AUD自身除以后,该列(现在完全由1组成)将用于后续计算。
Lionel Henry提出了两种方法,在本示例中我将对其进行更新。
result2 <- df %>%
mutate_at(vars(starts_with("rates.")), function (x) x/df$rates.AUD)
result3 <- df %>%
mutate_at(vars(starts_with("rates.")),`/`, y = .$rates.AUD)
Run Code Online (Sandbox Code Playgroud)
都返回此:
timestamp rates.USD rates.AUD rates.EUR
1 1490659199 0.7627655 1 0.7022980
2 1490745599 0.7652602 1 0.7075007
3 1490831999 0.7670259 1 0.7129298
4 1490918399 0.7653112 1 0.7160642
5 1491004766 0.7630501 1 0.7155380
6 1491091173 0.7630501 1 0.7155380
7 1491177598 0.7629499 1 0.7150756
8 1491263999 0.7604782 1 0.7127362
9 1491350399 0.7567651 1 0.7087067
10 1491436799 0.7565865 1 0.7089480
Run Code Online (Sandbox Code Playgroud)