r - R:grepl 和如果结合
问题描述
我有一个看起来像这样的数据框:
prccd isin
2 AR7463
7 AR12345
4 BD5347
5 CF29394
现在的目标是,如果第二列以 AR 开头,则将第一列乘以一个数字,例如 5,如果第二列以 BD 开头,则将其乘以例如 2,依此类推。我能做到吗?我尝试过这样的事情:
currencies<-function(GBP,CHF){
if (grepl("^GB",data$isin)==TRUE){
data[,"prccd"]*GBP[,"one_GBP_equivalent_to_x_EUR"]
}
if (grepl("^CH",data$isin)==TRUE){
data[,"prccd"]*CHF[,"one_CHF_equivalent_to_x_EUR"]
}
}
但我收到以下警告:
Warning messages:
1: In if (grepl("^GB", data$isin) == TRUE) { :
the condition has length > 1 and only the first element will be used
解决方案
与前 2 个条件类似,您可以根据第二列中的前 2 个字母在第三个条件中替换您想要乘以的任何内容。
library(dplyr)
df %>% mutate(col = case_when(substr(isin,1,2) == 'AR' ~ prccd * 5,
substr(isin,1,2) == 'BD' ~ prccd * 2,
TRUE ~ prccd * 1))
# A tibble: 4 x 3
prccd isin col
<dbl> <chr> <dbl>
1 2 AR7463 10
2 7 AR12345 35
3 4 BD5347 8
4 5 CF29394 5
推荐阅读
- python - 平均发光值与到图像中心的距离
- mysql - 从 TIMESTAMPDIFF (time, Current_Time()) 中提取 hh:mm:ss
- java - mysql-binlog-connector-java - 在二进制日志索引文件中找不到第一个日志文件名
- java - IBM AppScan 的验证要求问题
- openssl - 根 CA 证书和中间 CA 证书
- docker - 使用 docker 和 docker-compose 构建的工作流程是什么?
- javascript - 在 webpack + react 中使用 sass-loader 出现多个错误
- java - Reactor 调度程序实施注意事项
- javascript - 将 HTML 对象添加到事件 javascript/meteor
- c# - 找不到方法 Microsoft.Owin.Security.Notifications.MessageReceivedNotification