gpt4 book ai didi

r - 如何使用变量名称来引用带有 ddply 的数据框列?

转载 作者:行者123 更新时间:2023-12-04 10:54:08 31 4
gpt4 key购买 nike

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

当我直接将列名与 ddply 和 cumsum 一起使用时,我没有问题:

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))))

这一切都很好,但最终目标是能够将列名传递给这个函数。当我尝试使用变量代替列名时,它没有按我预期的那样工作:
mycol <- "sales"
df[mycol]

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

我以为我知道如何按名称访问列。这让我很担心,因为它表明我未能理解有关索引和提取的一些基本知识。我会认为以这种方式按名称引用列将是一种常见的需求。

我有两个问题。
  • 我做错了什么,即我误解了什么?
  • 有没有更好的方法来解决这个问题,记住列的名称不会被函数事先知道?

  • TIA

    最佳答案

    ddply 的参数是在原始数据帧拆分成的每个部分的上下文中计算的表达式。你的 df[myval] 处理整个数据框,所以你不能按原样传递它(顺便说一句,你为什么需要那些 as.numeric(as.character()) 的东西——它们完全没用)。

    最简单的方法是编写自己的函数,该函数将在内部执行所有操作并将列名向下传递,例如

    df <- ddply(df, 
    .(year),
    .fun = function(x, colname) transform(x, cum_sales = cumsum(x[,colname])),
    colname = "sales")

    关于r - 如何使用变量名称来引用带有 ddply 的数据框列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8869005/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com