gpt4 book ai didi

r - 如何将数据框的一列划分为另一列?

转载 作者:行者123 更新时间:2023-12-01 23:33:14 25 4
gpt4 key购买 nike

我想将一列除以另一列以获得每人的时间,我该怎么做?我找不到任何关于如何划分的信息。

这是我想要使用的一些数据

     min    count2.freq
263807.0 1582
196190.5 1016
586689.0 3479

最后,我想添加像这样的第三列,其中包含来自 min/count2.freq

的数字

例如263808.0/1582 = 166.75

最佳答案

有很多种方法可以做到这一点。问题是如何让 R 知道要划分的变量的位置。

假设

d <- read.table(text = "263807.0    1582
196190.5 1016
586689.0 3479
")
names(d) <- c("min", "count2.freq")
> d
min count2.freq
1 263807.0 1582
2 196190.5 1016
3 586689.0 3479

我的首选方式

要将所需的除法添加为第三个变量,我将使用 transform()

> d <- transform(d, new = min / count2.freq)
> d
min count2.freq new
1 263807.0 1582 166.7554
2 196190.5 1016 193.1009
3 586689.0 3479 168.6373

基本的 R 方式

如果在函数中执行此操作(即您正在编程),那么最好避免上面显示的糖和索引。在这种情况下,其中任何一个都会做你想做的事情

## 1. via `[` and character indexes
d[, "new"] <- d[, "min"] / d[, "count2.freq"]

## 2. via `[` with numeric indices
d[, 3] <- d[, 1] / d[, 2]

## 3. via `$`
d$new <- d$min / d$count2.freq

所有这些也可以在提示符下使用,但更容易阅读:

d <- transform(d, new = min / count2.freq)

d$new <- d$min / d$count2.freq ## or any of the above examples

希望你和我一样认为第一个版本更好;-)

我们在编程时不使用 tranform() 等语法糖的原因是因为它们如何进行评估(查找命名变量)。在顶层(在提示符下,交互工作)transform() 等工作得很好。但隐藏在函数调用中或对 apply() 系列函数之一的调用中,它们可能而且经常会中断。

同样,请小心使用数字索引(上面的## 2.);如果更改数据的顺序,您将选择错误的变量。

如果您不需要更换,则首选方式

如果您只想进行除法(而不是将结果插入数据框中,请使用with(),这使我们能够隔离您想要计算的简单表达式

> with(d, min / count2.freq)
[1] 166.7554 193.1009 168.6373

这又是比同等代码干净得多的代码

> d$min / d$count2.freq
[1] 166.7554 193.1009 168.6373

因为它明确指出“使用d,执行代码min/count2.freq。您的偏好可能与我的不同,因此我显示了所有选项。

关于r - 如何将数据框的一列划分为另一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13013231/

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