转换数据框字符串变量名称

发布于 2024-12-20 01:19:37 字数 935 浏览 3 评论 0原文

我有一个包含日期和 ID 的数据框。我需要根据每个日期向该数据框添加多列。我使用 ddply 来执行此操作,如下所示:

ddply(df, "dt", transform, new_column1 = myfun(column_name_1))

但是,我有一堆列名称和想要添加多个新列。有没有一种方法可以传递字符串进行转换而不是 new_column1 ?例如,我尝试过:

ddply(df, "dt", transform, get("some_column_name")=myfun(column_name_1))

但这不起作用。此外,如果我将 column_name_1 作为字符串传递给 myfun,我可以在 myfun 中使用 get("column_name_1") 来引用柱子?

更新: 不知道如何更好地格式化它

input:
id    date    val
id1   d1      1
id2   d1      2
id3   d1      3
id4   d1      4
id1   d2      10
id2   d2      20
id3   d2      30
id4   d2      40

(例如 2 个桶)

id    date    val     bucket
id1   d1      1         1
id2   d1      2         1
id3   d1      3         2
id4   d1      4         2
id1   d2      10        1
id2   d2      20        1
id3   d2      30        2
id4   d2      40        2

I have a data frame that contains dates and id's. I need to add multiple columns to this data frame based on each date. I use ddply to do this as follows:

ddply(df, "dt", transform, new_column1 = myfun(column_name_1))

However,I have a bunch of column names and would like to add multiple new columns. Is there a way that I can pass a string to transform instead of new_column1? For example I tried:

ddply(df, "dt", transform, get("some_column_name")=myfun(column_name_1))

but this does not work. Additionally, if I pass the column_name_1 to myfun as a string, can I just use get("column_name_1") within myfun to refer to the column?

UPDATE:
NOT SURE HOW TO FORMAT THIS BETTER

input:
id    date    val
id1   d1      1
id2   d1      2
id3   d1      3
id4   d1      4
id1   d2      10
id2   d2      20
id3   d2      30
id4   d2      40

out (for 2 buckets for example)

id    date    val     bucket
id1   d1      1         1
id2   d1      2         1
id3   d1      3         2
id4   d1      4         2
id1   d2      10        1
id2   d2      20        1
id3   d2      30        2
id4   d2      40        2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浮生面具三千个 2024-12-27 01:19:37

使用 transform 来做这件事很巧妙,但为什么不做一些更基本的事情

tmpf <- function(x) {
   x[[new_column_name_1]] <- myfun(x[[column_name_1]])
   x[[new_column_name_2]] <- myfun(x[[column_name_2]])
   ...
   x
}
ddply(df,"dt",tmpf)

,比如或者你可以有一个列名向量来修改,或者动态地做:

tmpf <- function(x,cols=c("column_name_1","column_name_2")) {
   newcols <- paste("new",cols,sep="_")
   for (i in seq_along(cols)) {
      x[[newcols[i]]] <- myfun(x[[cols[i]]])
   }
}

assign 可能有更聪明的东西 在适当的环境中。

如果我有一个可重现的例子,我可以测试一下。

Doing it with transform is slick, but why not something more basic like

tmpf <- function(x) {
   x[[new_column_name_1]] <- myfun(x[[column_name_1]])
   x[[new_column_name_2]] <- myfun(x[[column_name_2]])
   ...
   x
}
ddply(df,"dt",tmpf)

Or you can have a vector of column names to modify, or do it on the fly:

tmpf <- function(x,cols=c("column_name_1","column_name_2")) {
   newcols <- paste("new",cols,sep="_")
   for (i in seq_along(cols)) {
      x[[newcols[i]]] <- myfun(x[[cols[i]]])
   }
}

There's probably something even cleverer with assign in the appropriate environment.

If I had a reproducible example I could test this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文