首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用变量名来引用具有ddply的数据帧列?

如何使用变量名来引用具有ddply的数据帧列?
EN

Stack Overflow用户
提问于 2012-01-15 02:30:28
回答 2查看 5K关注 0票数 5

我正在尝试编写一个函数,它使用数据帧的名称、保存时间序列数据的名称以及该数据帧中的列的名称作为参数。该函数对该数据执行各种操作,其中之一是在一列中添加每年运行的总计。我在用plyr。

当我用ddply和累计直接使用列的名称时,我没有问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
require(plyr)
df <- data.frame(date = seq(as.Date("2007/1/1"),
                     by = "month",
                     length.out = 60),
                 sales = runif(60, min = 700, max = 1200))

df$year <- as.numeric(format(as.Date(df$date), format="%Y"))
df <- ddply(df, .(year), transform,
            cum_sales = (cumsum(as.numeric(sales))))

这一切都很好,但最终目标是能够将列名传递给这个函数。当我试图使用一个变量代替列名时,它不像我预期的那样工作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mycol <- "sales"
df[mycol]

df <- ddply(df, .(year), transform,
            cum_value2 = cumsum(as.numeric(df[mycol])))

我以为我知道如何用名字访问列。这让我很担心,因为它表明我对索引和提取的基本知识不太了解。我认为,以这种方式提及列名是一种普遍的需要。

我有两个问题。

我做错了什么呢?我misunderstood?

  • Is有什么更好的方法来做这件事,记住函数不会事先知道列的名称?

提亚

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-15 03:15:34

用于ddply的参数是表达式,这些表达式是在原始数据帧被分割成的每个部分的上下文中计算的。您的dfmyval处理整个数据帧,因此不能将其传递为-is(顺便说一下,为什么需要那些as.numeric(as.character()) --它们是完全无用的)。

最简单的方法是编写您自己的函数,它将完成内部的所有操作,并将列名向下传递。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df <- ddply(df, 
            .(year), 
            .fun = function(x, colname) transform(x, cum_sales = cumsum(x[,colname])), 
            colname = "sales")
票数 7
EN

Stack Overflow用户

发布于 2012-01-15 02:57:35

问题是,ddply希望它的最后一个参数是表达式,这些表达式将在data.frame的块上进行计算(在您的示例中,每年都是这样)。如果使用df[myval],就会得到整个data.frame,而不是年度块。

下面的方法可以工作,但并不是很优雅:我将表达式构建为字符串,然后使用eval(parse(...))进行转换。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ddply( df, .(year), transform, 
  cum_value2 = eval(parse( text = 
    sprintf( "cumsum(as.numeric(as.character(%s)))", mycol )
  ))
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8869005

复制
相关文章
[深入解析C#] 可空值类型
Tony Hoare于1965年在Algol语言中首次引入了null引用的概念,后来他把这项举措称为“十亿美金的过失”。无数开发人员饱受NullReferenceException(.NET)、NullPointerException(Java)等的折磨。由于此类问题的普遍性,Stack Overflow上有大量与之相关的典型问题。既然可空特性如此声名狼藉,为何C# 2以及.NET 2.0要引入可空值类型呢?
科控物联
2022/03/29
2.3K0
常用图像插值方法概述
https://github.com/AndroidDeveloperLB/AndroidJniBitmapOperations
音视频开发进阶
2021/05/10
1.7K0
常用图像插值方法概述
图像处理-图像插值
比较常用的插值算法有这么几种:最邻近插值,双线性二次插值,三次插值,Lanczos插值等等
AomanHao
2022/01/14
4.1K0
【MATLAB】图像导出 ( 导出绘制的图像 | 图像设置 )
选择 matlab 生成的图形界面 " Figure 1 " 的菜单栏 , " 编辑选项 " , 点击 " 复制图形 " , 可以将图像拷贝到 Word 文档中 ;
韩曙亮
2023/03/29
9.9K0
【MATLAB】图像导出 ( 导出绘制的图像 | 图像设置 )
【从零学习OpenCV 4】图像直方图绘制
经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《从零学习OpenCV 4》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。
小白学视觉
2019/12/13
1K0
图像二值化方法汇总介绍
ImageJ中图像二值化方法介绍 概述 二值图像分析在对象识别与模式匹配中有重要作用,同时也在机器人视觉中也是图像处理的关键步骤,选择不同图像二值化方法得到的结果也不尽相同。本文介绍超过十种以上的基于
OpenCV学堂
2018/04/04
4.6K1
图像二值化方法汇总介绍
将图像转换为JPG或GIF字节流。
其实这个东西真的没有什么可谈的,完全都是一堆API函数的调用,不过呢,隔那么一段时间就有人在那里问,而且一般也得不到正确的答案,因此,我还是画蛇添足,共享一下这些调用的苦力活吧。
用户1138785
2019/09/11
1.8K0
将图像转换为JPG或GIF字节流。
图像处理常用插值方法总结
在做数字图像处理时,经常会碰到小数象素坐标的取值问题,这时就需要依据邻近象素的值来对该坐标进行插值。比如:做地图投影转换,对目标图像的一个象素进行坐标变换到源图像上对应的点时,变换出来的对应的坐标是一个小数,再比如做图像的几何校正,也会碰到同样的问题。以下是对常用的三种数字图像插值方法进行介绍。 1、最邻近元法   这是最简单的一种插值方法,不需要计算,在待求象素的四邻象素中,将距离待求象素最近的邻象素灰度赋给待求象素。设i+u, j+v(i, j为正整数, u, v为大于零小于1的小数,下同)为待求象素坐
智能算法
2018/04/03
4K0
图像处理常用插值方法总结
图像插值
算法:图像插值是在基于模型框架下,从低分辨率图像生成高分辨率图像的过程,用以恢复图像中所丢失的信息。图像常见的插值算法可以分为两类:自适应和非自适应,如最近邻插值,双线性插值,双平方插值,双立方插值以及其他高阶方法等,应用于军事雷达图像、卫星遥感图像、天文观测图像、地质勘探数据图像、生物医学切片及显微图像等特殊图像及日常人物景物图像的处理。
裴来凡
2022/05/28
7220
图像插值
浅谈彩色图像、灰度图像、二值图像和索引图像区别
彩色图像:每个像素由R、G、B三个分量表示,每个通道取值范围0~255。数据类型一般为8位无符号整形。
种花家的奋斗兔
2020/11/12
5.6K0
C#可空值类型
1. 可空类型修饰符(?)   引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。   例如:string str=null; 是正确的,int i=null; 编译器就会报错。
_一级菜鸟
2021/08/10
1.4K0
用matlab绘制函数图像例题_matlab绘制方程组图像
比如f(x,y)=-((x^2+y-1).^2+(x+y^2-7)^2)/200+10
全栈程序员站长
2022/10/04
8910
用matlab绘制函数图像例题_matlab绘制方程组图像
根据key 从yml 获取具体值的工具类
这里写目录标题 1 工具类 1 工具类 public class YamlUtil { // public static final YamlUtil instance = new YamlUtil(); private static Map<String, Map<String, Object>> ymlMap = new HashMap<>(); static { Yaml yaml = new Yaml(); try (InputStrea
一写代码就开心
2022/08/16
2.7K0
图像二值化-局部阈值方法汇总
概述: 在图像处理中二值图像处理与分析是图像处理的重要分支,图像二值分割尤为重要,有时候基于全局阈值自动分割的方法并不能准确的将背景和对象二值化,这个时候就需要使用局部的二值化方法。常见的图像二值化局
OpenCV学堂
2018/04/04
9K0
图像二值化-局部阈值方法汇总
Android根据资源名获取资源ID
接触过Android开发的同学们都知道在Android中访问程序资源基本都是通过资源ID来访问。这样开发起来很简单,并且可以不去考虑各种分辨率,语言等不同资源显式指定。
技术小黑屋
2018/09/04
3.5K0
[IJCAI | 论文简读] 图像重建的残差对比学习:从噪声图像中学习可转移表示
Residual Contrastive Learning for Image Reconstruction: Learning Transferable Representations from Noisy Images
智能生信
2022/12/29
5750
[IJCAI | 论文简读] 图像重建的残差对比学习:从噪声图像中学习可转移表示
【从零学习OpenCV 4】图像二值化
经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《从零学习OpenCV 4》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。
小白学视觉
2019/11/27
9960
【从零学习OpenCV 4】图像二值化
matlab习题 —— 图像绘制练习
一、题目 (1) 读取附件1 sd.xlsx,以相邻两列数据绘制散点图并标注;以第 1,2,4 列数据绘制空间散点图 (2) 根据下面图形写出作图语句 ① y=sinx , y=cosx 在同一幅图; ② y=sinx , y=cosx 在同一幅图不同窗口 (3) 数组 [2,5,10,12,13,7,2,10,4,6,8,8,4,7,8] 作竖直、水平、立体柱状图、饼状图 (4) 绘制空间曲线 x=e^{0.3t}sint , y=e^{0.3t}cost , z=e^{0.3
繁依Fanyi
2023/05/07
7400
matlab习题 —— 图像绘制练习
【python图像处理】python绘制
3D图形在数据分析、数据建模、图形和图像处理等领域中都有着广泛的应用,下面将给大家介绍一下如何使用python进行3D图形的绘制,包括3D散点、3D表面、3D轮廓、3D直线(曲线)以及3D文字等的绘制。
py3study
2020/01/10
1.5K0
【python图像处理】python绘制
点击加载更多

相似问题

获取可绘制的图像ID

14

从可绘制路径获取图像

31

如何从可绘制的图像中获取唯一id !!.

12

从资源id获取可绘制对象时的相同图像

10

从可绘制的动态获取图像

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文