[英]How to apply the diff function on a tibble
我想將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] %>% diff
和data.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:
...
我不明白的是:
編輯:不正確,我確實使用mapvalues()
函數創建數據框,所以我想這就是為什么它是小標題,而不是簡單的數據框。
我的data.op 也是一個數據幀,那么為什么diff(data.op[, abscissa])
不起作用?
為什么data.op[, abscissa] %>% diff
和data.op %>% select(abscissa) %>% diff
也不起作用?
我真的需要將其轉換為數據框以進行簡單的比較嗎? 這不利於可讀性...
抱歉,我無法提供更可重復的示例。 我嘗試了mtcars,並且一切正常(但是mtcars是一個數據幀,而不是一個小問題)。 在某個時候,我的data.op數據幀被轉換為小標題,但是我不知道為什么。
提供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"
現在從?diff
x-包含要求值的數值向量或矩陣
因此,它不適用於小標題。
你可以做
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
以來
df %>% pull(abscissa) %>% class
#[1] "numeric"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.