在转换中引用新列

发布于 2024-11-24 12:47:26 字数 519 浏览 2 评论 0原文

我有一个数据框,其中的列标记为 A、B 和; C. 我想添加根据现有列和新列本身计算得出的新列。为了实现这一点,我尝试使用这样的转换函数:

Data = transform(Data,
          NewD = A + B,
          NewE = C * NewD
)

但这给出了一个错误:

eval(expr, envir, enclos) 中的错误:未找到对象“NewD”

我也尝试了这样的 cbind 函数:

NewD = Data$A + Data$B,
NewE = Data$C * New$D
Data=cbind(Data,NewD,NewE)

但是当附加列(函数)的数量增加时,它会变得很麻烦。

如何在变换函数中引用 NewD,或者是否有更好的方法来应用这样的多个函数。我希望数据包含列 A、B、C、NewD 和NewE 无需多次调用转换函数。

I have a dataframe with columns labeled A,B & C. I want to add new columns that are calculated from the existing columns AND the new columns themselves. To achieve this I tried using the transform function like this:

Data = transform(Data,
          NewD = A + B,
          NewE = C * NewD
)

But this gives an error:

Error in eval(expr, envir, enclos) : object 'NewD' not found

I also tried the cbind function like this:

NewD = Data$A + Data$B,
NewE = Data$C * New$D
Data=cbind(Data,NewD,NewE)

But it gets cumbersome when the number of additional columns(functions) grows.

How can I reference NewD inside the transform function, or is there a better way to apply multiple functions like this. I want Data to contain columns A, B, C, NewD & NewE without having to call the transform funciton numerous times.

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

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

发布评论

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

评论(3

琉璃梦幻 2024-12-01 12:47:26

也许类似这样的事情

d <- data.frame(a=1:5, b=6:10)
transform(d, c=tmp <- a+b, e=b*tmp)

可以做到吗?

Maybe something like this

d <- data.frame(a=1:5, b=6:10)
transform(d, c=tmp <- a+b, e=b*tmp)

does it?

话少心凉 2024-12-01 12:47:26

Hadley 在其 plyr 包中有一个 mutate 函数,它正是执行此操作的。这是 @Karsten 使用 mutate 使用的相同示例。我发现 mutate 代码对于此类任务更具可读性,因为它不需要内部任何临时分配。

require(plyr)
d = data.frame(a = 1:5, b = 6:10)
mutate(d, c = a + b, d = b * c, e = c * d)

Hadley has a mutate function in his plyr package that does precisely this. Here is the same example used by @Karsten using mutate. I find mutate code more readable for such tasks, as it does not require any temporary assignments inside.

require(plyr)
d = data.frame(a = 1:5, b = 6:10)
mutate(d, c = a + b, d = b * c, e = c * d)
衣神在巴黎 2024-12-01 12:47:26

这里有几种方法。我们使用内置数据框 BOD 进行说明:

within

> within(BOD, { a <- Time + 1; b <- a + 1 })
  Time demand b a
1    1    8.3 3 2
2    2   10.3 4 3
3    3   19.0 5 4
4    4   16.0 6 5
5    5   15.6 7 6
6    7   19.8 9 8

my.transform

my.transform 已定义 此处并允许引用新列:

> my.transform(BOD, a = Time + 1, b = a + 1)
  Time demand a b
1    1    8.3 2 3
2    2   10.3 3 4
3    3   19.0 4 5
4    4   16.0 5 6
5    5   15.6 6 7
6    7   19.8 8 9

Here are a couple of ways. We illustrate using the built in data frame BOD:

within

> within(BOD, { a <- Time + 1; b <- a + 1 })
  Time demand b a
1    1    8.3 3 2
2    2   10.3 4 3
3    3   19.0 5 4
4    4   16.0 6 5
5    5   15.6 7 6
6    7   19.8 9 8

my.transform

my.transform is defined here and allows one to reference new columns:

> my.transform(BOD, a = Time + 1, b = a + 1)
  Time demand a b
1    1    8.3 2 3
2    2   10.3 3 4
3    3   19.0 4 5
4    4   16.0 5 6
5    5   15.6 6 7
6    7   19.8 8 9
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文