如何在微词上应用diff函数

时间:2019-02-15 10:27:44

标签: r

我想对数据框列应用diff,并按其名称进行访问。我的工作如下:

abscissa <- "distance"
data.op[, abscissa]

我得到这个输出

# A tibble: 15 x 1
   distance
        <dbl>
 1     0.0426
 2     0.0409
 3     0.0412
 4     0.0406
 5     0.0406
 6     0.0407
 7     0.0402
 8     0.0403
 9     0.103 
10     0.0402
11     0.0395
12     0.0407
13     0.0406
14     0.0405
15     0.0404

然后我简单地尝试:

 diff(data.op[, abscissa])

但是输出是:

 # A tibble: 15 x 0

我还尝试了data.op[, abscissa] %>% diffdata.op %>% select(abscissa) %>% diff的零列结果。

但是,如果我愿意

diff(as.data.frame(data.op)[, abscissa])

有效:

[1] -0.00169560  0.00024120 -0.00061200  0.00000000  0.00013320 -0.00045360  0.00003240  0.06299047 -0.06306967 -0.00071640  0.00120960 -0.00007920
[13] -0.00010440 -0.00005400

当我输入str(data.op)时,我得到:

Classes ‘grouped_df’, ‘tbl_df’, ‘tbl’ and 'data.frame': 15 obs. of  28 variables:
...

我不明白的是:

  • 为什么我的数据框有问题? 好吧,我安装了tidyverse,但之前从未在此数据框中使用它。

编辑:不正确,我确实使用了mapvalues()函数来创建数据框,所以我想这就是为什么它是小标题,而不是简单的数据框。

  • 我的data.op也是 一个数据帧,所以diff(data.op[, abscissa])为什么不起作用?

  • 为什么data.op[, abscissa] %>% diffdata.op %>% select(abscissa) %>% diff也不起作用?

  • 我真的需要将其转换为数据框以进行简单的比较吗?这不利于可读性...

对不起,我无法提供更可重复的示例。我尝试了mtcars,并且一切正常(但是mtcars是一个数据帧,而不是一个小问题)。在某个时候,我的data.op数据帧被转换为小标题,但我不知道为什么。

1 个答案:

答案 0 :(得分:4)

使用float *calcNewArray(float *oldArray, int oldsize) { float *newArray; int new_size = oldsize - outliers; newArray = malloc((new_size) * sizeof(float)); for (i = 0; i < new_size; i++) { newArray[i] = oldArray[i]; } return newArray; }

提供可复制的示例
mtcars

现在,当您完成

library(tidyverse)
df <- as.tibble(mtcars)
abscissa <- "mpg"

但是

diff(df[, abscissa])
# A tibble: 32 x 0

工作正常。

那是因为

diff(mtcars[, abscissa])
#[1]   0.0   1.8  -1.4  -2.7  -0.6  -3.8  10.1  -1.6  -3.6  -1.4  -1.4   0.9
#[13]  -2.1  -4.8   0.0   4.3  17.7  -2.0   3.5 -12.4  -6.0  -0.3  -1.9   5.9
#[25]   8.1  -1.3   4.4 -14.6   3.9  -4.7   6.4

class(df[, abscissa])
#[1] "tbl_df"     "tbl"        "data.frame"

现在来自class(mtcars[, abscissa]) #[1] "numeric"

  

x-包含要求差值的数字矢量或矩阵

因此,它不适用于小标题。

您可以

?diff

df %>% pull(abscissa) %>% diff
# [1]   0.0   1.8  -1.4  -2.7  -0.6  -3.8  10.1  -1.6  -3.6  -1.4  -1.4   0.9
#[13]  -2.1  -4.8   0.0   4.3  17.7  -2.0   3.5 -12.4  -6.0  -0.3  -1.9   5.9
#[25]   8.1  -1.3   4.4 -14.6   3.9  -4.7   6.4