当 R 中少一行时使用 diff() 函数添加新列
Adding new column with diff() function when there is one less row in R
如果我有一个像 mtcars 这样的示例数据框,并且我想找出所有行的 mtcars$qsec 之间的差异,我可以执行 diff(mtcars$qsec)。但是有没有一种简单的方法可以使 diff(mtcars$qsec) 成为原始 mtcars 数据框中的新列?我发现这很难,因为 diff(mtcars$qsec) 中的行比 mtcars 的其余部分少了一行。
> head(mtcars,3)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
这里有两种方法。都在diff_qsec
的第一行放一个NA
,在剩下的行放diff(qsec)
:
library(dplyr)
mtcars %>% mutate(diff_qsec = qsec - lag(qsec)) # dplyr has its own version of lag
transform(mtcars, diff_qsec = c(NA, diff(qsec)))
此外,关于填充的一般问题,请参阅:
您可以像这样使用 within() 的基本函数:
mtcars <- within(mtcars, difference <- c(NA,diff(qsec)))
这将创建一个名为 "difference" 的列,其中第一个元素为 NA,其余元素由 diff(qsec) 计算。
您可以通过将命令包装在 {} 中来同时创建更多列,例如:
mtcars <- within(mtcars, {difference <- c(NA,diff(qsec))
multiple <- qsec*2})
请注意,您必须使用 <- 进行赋值,而不是 =。
如果我有一个像 mtcars 这样的示例数据框,并且我想找出所有行的 mtcars$qsec 之间的差异,我可以执行 diff(mtcars$qsec)。但是有没有一种简单的方法可以使 diff(mtcars$qsec) 成为原始 mtcars 数据框中的新列?我发现这很难,因为 diff(mtcars$qsec) 中的行比 mtcars 的其余部分少了一行。
> head(mtcars,3)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
这里有两种方法。都在diff_qsec
的第一行放一个NA
,在剩下的行放diff(qsec)
:
library(dplyr)
mtcars %>% mutate(diff_qsec = qsec - lag(qsec)) # dplyr has its own version of lag
transform(mtcars, diff_qsec = c(NA, diff(qsec)))
此外,关于填充的一般问题,请参阅:
您可以像这样使用 within() 的基本函数:
mtcars <- within(mtcars, difference <- c(NA,diff(qsec)))
这将创建一个名为 "difference" 的列,其中第一个元素为 NA,其余元素由 diff(qsec) 计算。
您可以通过将命令包装在 {} 中来同时创建更多列,例如:
mtcars <- within(mtcars, {difference <- c(NA,diff(qsec))
multiple <- qsec*2})
请注意,您必须使用 <- 进行赋值,而不是 =。