如何将数据框的一列分成另一列?

use*_*021 17 r count

我想把一列与另一列分开以获得每人的时间我该怎么做?我找不到任何关于你如何划分的内容.

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

     min    count2.freq
263807.0    1582
196190.5    1016
586689.0    3479
Run Code Online (Sandbox Code Playgroud)

最后我想添加一个这样的第三列,其中包含数字 min / count2.freq

例如 263808.0/1582 = 166.75

Rei*_*son 42

有很多种方法可以做到这一点.问题是如何让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
Run Code Online (Sandbox Code Playgroud)

我的首选方式

要将所需的除法作为第三个变量添加,我会使用 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
Run Code Online (Sandbox Code Playgroud)

基本的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
Run Code Online (Sandbox Code Playgroud)

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

d <- transform(d, new = min / count2.freq)
Run Code Online (Sandbox Code Playgroud)

要么

d$new <- d$min / d$count2.freq ## or any of the above examples
Run Code Online (Sandbox Code Playgroud)

希望你像我一样思考,第一个版本更好;-)

我们tranform()在编程时不使用et al 的语法糖的原因是因为他们如何进行评估(寻找命名变量).在顶层(在提示,交互式工作)transform()等工作得很好.但是在功能调用中或者在调用其中一个apply()函数系列时,它们可以并且经常会中断.

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

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

如果你只是想进行除法(而不是将结果插回到数据框中,那么使用with(),这允许我们隔离你想要评估的简单表达式

> with(d, min / count2.freq)
[1] 166.7554 193.1009 168.6373
Run Code Online (Sandbox Code Playgroud)

这比同等的代码更清晰

> d$min / d$count2.freq
[1] 166.7554 193.1009 168.6373
Run Code Online (Sandbox Code Playgroud)

因为它明确指出"使用d,执行代码min / count2.freq.你的偏好可能与我的不同,所以我已经展示了所有选项.

  • 对于一个初级R用户来说,这对于一个非常简单的问题来说,这是一个比复杂而非必要的解决方案. (4认同)
  • 这只是一个重点问题.我想我会带着'd $ new < - d $ min/d $ count2.freq`(如"这解决了你的问题:继续阅读其他选择")和*然后*给出所有其他选项......谢谢你省略`attach()`. (4认同)