我有一个包含汇率的数据框。我想将任何以" rate开头的列分开。"通过" 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")
我已尝试过以下
library(tidyverse)
result <- df %>% mutate_at(vars(starts_with("rates.")), funs(./rates.AUD))
但它没有将该功能应用于以&#34; rate开头的所有列。&#34;。 rate.USD和rates.AUD改变了,但是率.EUR保持不变。
我有点困惑,帮助赞赏。
答案 0 :(得分:5)
我有同样的问题,无法弄明白,甚至将其作为问题发布在dplyr GH repo here上。响应非常有用,并且对您有用。问题的总结是,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)
都返回:
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
答案 1 :(得分:2)
按费率划分三个费率列时,按顺序划分它们。 rates.AUD除以其自身并等于1s,然后才能用于划分rate.EUR列。这样,rates.EUR除以1并保持不变。
解决方法是更改列顺序放置率.AUD作为最后一个:
df = df[,c(1,2,4,3)]
在做计算之前。