Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >R使用ifelse-function为多个数据帧创建新列

R使用ifelse-function为多个数据帧创建新列
EN

Stack Overflow用户
提问于 2019-03-09 19:51:24
回答 2查看 57关注 0票数 0

我想用ifelse()-condition为多个数据帧创建几个列。在这种情况下,数据帧是加密货币的3个时间序列数据。下面是自动下载3个数据帧的代码:

代码语言:javascript
运行
AI代码解释
复制
library(tidyverse)
library(crypto)

crypto_chart <- crypto_prices()%>% select(-id, -symbol,-price_btc, -`24h_volume_usd`,-available_supply, -total_supply,-max_supply, -percent_change_1h, -percent_change_24h, -percent_change_7d, -last_updated)%>% slice(1:3)

list_cryptocurrencies <-crypto_chart$name   

map(list_cryptocurrencies,
    function(x) crypto_history(x, start_date = '20150101', end_date = '20190303')%>%
      select(-slug, -symbol, -name, -`ranknow`))%>%
set_names(list_cryptocurrencies)%>%
list2env(envir = .GlobalEnv)

##Calculating return
map(mget(list_cryptocurrencies),
function(x) x %>% mutate(`return` =   (close-open)/open * 100))%>%
list2env(mget(list_cryptocurrencies), envir = .GlobalEnv)

现在,我想要检测返回中的积极过度反应(oR_pos)。我将过度反应定义为高于平均值+1标准差的值(返回)。我想对1.5和2的标准差也这样做。以下是我对一个加密货币(比特币)的期望输出:

代码语言:javascript
运行
AI代码解释
复制
> Bitcoin
     date    open   close      return     oR_pos>1sd oR_pos>1.5sd oR_pos>2sd
1  2018-01-01 14112.2 13657.2  -3.2241607         NA           NA         NA
2  2018-01-02 13625.0 14982.1   9.9603670   9.960367     9.960367   9.960367
3  2018-01-03 14978.2 15201.0   1.4874952         NA           NA         NA
4  2018-01-04 15270.7 15599.2   2.1511784         NA           NA         NA
5  2018-01-05 15477.2 17429.5  12.6140387  12.614039    12.614039  12.614039
6  2018-01-06 17462.1 17527.0   0.3716621         NA           NA         NA
7  2018-01-07 17527.3 16477.6  -5.9889430         NA           NA         NA
8  2018-01-08 16476.2 15170.1  -7.9271919         NA           NA         NA
9  2018-01-09 15123.7 14595.4  -3.4931928         NA           NA         NA
10 2018-01-10 14588.5 14973.3   2.6376941         NA           NA         NA
11 2018-01-11 14968.2 13405.8 -10.4381288         NA           NA         NA
12 2018-01-12 13453.9 13980.6   3.9148500   3.914850           NA         NA

现在我有3个带有过度反应(OR_pos)的新色谱柱,它们是> 1sd;1.5sd和2sd。

我已经试过这个代码了:

代码语言:javascript
运行
AI代码解释
复制
oR_pos_function <- function(y) {
n <- seq(1, 2, 0.5)
y[paste0("oR_pos>", n, "sd")] <-lapply(n, function(x)
ifelse(x$return > mean(x$return)+ sd(x$return),x$return, NA))
y
}

map(mget(list_cryptocurrencies), oR_pos_function)%>%
set_names(list_cryptocurrencies)%>%
list2env(envir = .GlobalEnv)

但它不起作用。有人能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-09 21:06:50

下面的代码与您的预期功能非常匹配,将所需的列添加到您的加密中,同时允许将所需的sd阈值作为参数传入,以提高灵活性。另外请注意,下面的解决方案使用>作为每个操作,但您可能希望考虑从sd移动+/-方向。使用下面的解决方案可以改为使用:

代码语言:javascript
运行
AI代码解释
复制
col <- ifelse(returns > (r_mean+(r_sd*threshold)) | 
              returns < (r_mean-(r_sd*threshold)),
              returns,NA)

解决方案如下:

代码语言:javascript
运行
AI代码解释
复制
oR_pos_function <- function(returns,thresholds) {

  r_mean <- mean(returns,na.rm=T)
  r_sd <- sd(returns,na.rm=T)

  cols <- lapply(thresholds,function(threshold) {
    col <- ifelse(returns > (r_mean+(r_sd*threshold)),returns,NA)
    return(col)
  })
  cols <- as.data.frame(cols)
  names(cols) <- paste0("oR_pos>",thresholds,"sd")
  return(cols)  
}

new_cols <- oR_pos_function(returns=Bitcoin$return,thresholds=c(1,1.5,2))
Bitcoin <- cbind(Bitcoin,new_cols)

结果:

代码语言:javascript
运行
AI代码解释
复制
> head(Bitcoin[Bitcoin$date>="2018-01-01",])
           date    open    high     low   close      volume       market close_ratio spread     return oR_pos>1sd oR_pos>1.5sd oR_pos>2sd
1097 2018-01-01 14112.2 14112.2 13154.7 13657.2 10291200000 229119155396   0.5248042  957.5 -3.2241607         NA           NA         NA
1098 2018-01-02 13625.0 15444.6 13163.6 14982.1 16846600192 251377913955   0.7972381 2281.0  9.9603670   9.960367     9.960367   9.960367
1099 2018-01-03 14978.2 15572.8 14844.5 15201.0 16871900160 255080562912   0.4894961  728.3  1.4874952         NA           NA         NA
1100 2018-01-04 15270.7 15739.7 14522.2 15599.2 21783199744 261795321110   0.8845996 1217.5  2.1511784         NA           NA         NA
1101 2018-01-05 15477.2 17705.2 15202.8 17429.5 23840899072 292544135538   0.8898258 2502.4 12.6140387  12.614039    12.614039  12.614039
1102 2018-01-06 17462.1 17712.4 16764.6 17527.0 18314600448 294217423675   0.8043891  947.8  0.3716621         NA           NA         NA
> 

每条评论的备选方案:

代码语言:javascript
运行
AI代码解释
复制
oR_pos_function <- function(coin_data,thresholds) {

  returns <- coin_data$return
  r_mean <- mean(returns,na.rm=T)
  r_sd <- sd(returns,na.rm=T)

  cols <- lapply(thresholds,function(threshold) {
    col <- ifelse(returns > (r_mean+(r_sd*threshold)),returns,NA)
    return(col)
  })
  cols <- as.data.frame(cols)
  names(cols) <- paste0("oR_pos>",thresholds,"sd")
  coin_data <- cbind(coin_data,cols)
  return(coin_data)  
}
票数 1
EN

Stack Overflow用户

发布于 2019-03-09 20:22:06

您可以使用dplyr::mutate添加任何此类字段

代码语言:javascript
运行
AI代码解释
复制
library(dplyr)
Bitcoin %>%
  mutate(oR_pos_1sd = ifelse(return > mean(return) + sd(return), return , NA),
         oR_pos_1.5sd = ifelse(return > mean(return) + 1.5*sd(return), return , NA),
         oR_pos_2sd = ifelse(return > mean(return) + 2*sd(return), return , NA)) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55081349

复制
相关文章
R语言学习 - 柱状图
柱状图绘制 柱状图也是较为常见的一种数据展示方式,可以展示基因的表达量,也可以展示GO富集分析结果,基因注释数据等。 常规矩阵柱状图绘制 有如下4个基因在5组样品中的表达值 data_ori <- "Grp_1;Grp_2;Grp_3;Grp_4;Grp_5 a;2.6;2.9;2.1;2.0;2.2 b;20.8;9.8;7.0;3.7;19.2 c;10.0;11.0;9.2;12.4;9.6 d;9;3.3;10.3;11.1;10" data <- read.table(text=data_ori
生信宝典
2018/02/05
2.6K0
R语言学习 - 柱状图
按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值
前几天在Python星耀交流群有个叫【在下不才】的粉丝问了一个Pandas的问题,按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值,这里拿出来给大家分享下,一起学习。
前端皮皮
2022/08/17
3.1K0
按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值
Pandas中求某一列中每个列表的平均值
前几天在Python最强王者交流群【冫马讠成】问了一道Pandas处理的问题,如下图所示。
前端皮皮
2022/08/17
5.1K0
Pandas中求某一列中每个列表的平均值
ggcoverage优雅的绘制各种组学注释图
R语言数据分析指南
2023/08/18
5920
ggcoverage优雅的绘制各种组学注释图
ggplot2
原文:https://blog.csdn.net/weixin_44510615/article/details/89579225
润森
2019/11/05
7090
ggplot2
单细胞转录组绘制肺癌图谱
肺癌是一种异质性疾病,包括不同的组织病理学亚型。除了腺癌和鳞状细胞癌外,2021 年 WHO 分类还包含肺神经内分泌肿瘤 (NEN) 类别。其中包括高级别神经内分泌癌 (NEC)、小细胞肺癌 (SCLC) 和大细胞神经内分泌癌 (LCNEC) 以及肺的低级别和中级别神经内分泌肿瘤 (NET),也分别称为典型类癌和非典型类癌。
生信技能树jimmy
2023/02/16
4600
单细胞转录组绘制肺癌图谱
单细胞转录组绘制肺癌图谱
肺癌是一种异质性疾病,包括不同的组织病理学亚型。除了腺癌和鳞状细胞癌外,2021 年 WHO 分类还包含肺神经内分泌肿瘤 (NEN) 类别。其中包括高级别神经内分泌癌 (NEC)、小细胞肺癌 (SCLC) 和大细胞神经内分泌癌 (LCNEC) 以及肺的低级别和中级别神经内分泌肿瘤 (NET),也分别称为典型类癌和非典型类癌。
生信技能树
2023/02/27
2130
单细胞转录组绘制肺癌图谱
python通过Matplotlib绘制常见的几种图形
使用matplotlib对几种常见的图形进行绘制 Matplotlib官网 如果想了解更多可查看官网。 import numpy as np import matplotlib.pyplot as plt %matplotlib inline #写了这个就可以不用写plt.show() plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 X
Python研究者
2021/08/23
8640
用matlab绘制函数图像例题_matlab绘制方程组图像
比如f(x,y)=-((x^2+y-1).^2+(x+y^2-7)^2)/200+10
全栈程序员站长
2022/10/04
9070
用matlab绘制函数图像例题_matlab绘制方程组图像
PHP-通过for循环将数组中值求和、求平均值
6、 打印100以内的斐波那契数(迭代法)1 1 2 3 5 8 13 21 …
cwl_java
2020/03/26
2.9K0
通过UDP的组播方式收发数据
客户端代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Text; na
liulun
2022/05/09
1.2K0
这些条形图的用法您都知道吗?
条形图专用于离散变量和数值变量之间的可视化展现,其通过柱子的高低,直观地比较离散变量各水平之间的差异,它被广泛地应用于工业界和学术界。在R语言的ggplot2包中,读者可以借助于geom_bar函数轻松地绘制条形图。对于条形图大家对其的印象是什么呢?又见过哪些种类的条形图呢?在本篇文章我将带着各位网友说道说道有关条形图的哪些品种。
1480
2019/08/05
5.7K0
这些条形图的用法您都知道吗?
python求平均值的怎么编写,python 怎么求平均值[通俗易懂]
python求平均值的方法:首先新建一个python文件;然后初始化sum总和的值;接着循环输入要计算平均数的数,并计算总和sum的值;最后利用“总和/数量”的公式计算出平均数即可。
全栈程序员站长
2022/11/15
7.3K0
python求平均值的怎么编写,python 怎么求平均值[通俗易懂]
pycirclize带你轻松绘制基因组图
R语言数据分析指南
2023/08/18
8951
pycirclize带你轻松绘制基因组图
ggplot2绘制森林图(有亚组和没亚组)
之前写了很多篇推文介绍森林图,包括了常见的forestplot/forestploter/ggforestplot等多个R包:
医学和生信笔记
2023/02/14
2.7K0
ggplot2绘制森林图(有亚组和没亚组)
空间转录组都绘制了哪些图谱?
之前我们通过一篇综述(👉  空间转录组是一种怎样的转录组?),了解了空间转录组各种方法的技术原理/优缺点,空间转录组的应用等信息,其中空间转录组的应用范围覆盖构建空间转录组图谱和描绘胚胎发育/空间蓝图等。 空间转录组都绘制了哪些图谱? 01人类心脏发育全器官尺度单细胞基因表达时空图谱 研究人员采集妊娠早期三个阶段(4.5–5,6.5,9周)的心脏组织样本,依次采用空间转录组学(ST)、单细胞转录组测序(scRNA-seq)和原位靶向测序技术(ISS)进行分层研究。揭示了胚胎心脏在三个发育阶段的细胞类型的
尐尐呅
2021/09/02
9300
空间转录组都绘制了哪些图谱?
GENESPACE优雅的绘制基因组共线性图
R语言数据分析指南
2023/08/18
1K0
GENESPACE优雅的绘制基因组共线性图
ggplot2多图Panel 组合【facet_wrap() and facet_grid()】
今天就说下ggplot在绘制多图时候的一些骚操作。R里面的ggplot绘图很强大,有时候一张图可能满足不了我们的需求,需要分组展示,同时放在同一个Panel内。这时候ggplot里面的(facet_wrap() and facet_grid())[https://www.r-graph-gallery.com/ggplot2-package.html]就提供了极大的便利。 本文主要介绍:
Jamesjin63
2022/11/03
1.4K0
ggplot2多图Panel 组合【facet_wrap() and facet_grid()】
数据挖掘知识脉络与资源整理(九)–柱形图
柱形图 简介 英文:histogram或者column diagram 排列在工作表的列或行中的数据可以绘制到柱形图中。在柱形图中,通常沿水平轴组织类别,而沿垂直轴组织数值。 柱形图具有下列图表子类型
小莹莹
2018/04/25
3.8K0
数据挖掘知识脉络与资源整理(九)–柱形图
点击加载更多

相似问题

Microsoft Graph API / Office Planner数据的权限访问令牌

11

Microsoft Graph Api -No权限在请求Me.Photo时访问令牌

111

Microsoft Graph API的权限

10

Microsoft Graph API -获取组-权限错误

120

Microsoft Graph API访问令牌验证失败(java)

18
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档