我創建了一個測驗資料框,并在該資料框上運行了一個突變。我認為這個問題可能會發生,因為我在 count 函式的列上使用了子集。但我不太確定。
df<- data.frame(treatment = rep(c("A","B","C"),times = 3),
numb = c(1:3,6:9,12,13))
df_test1 <- df %>%
group_by(treatment) %>%
summarise(mean= (mean(numb)), sum=(sum(numb))) %>%
mutate(times = count(df, treatment)[2], thing = mean sum)
write.csv(df_test1, 'test.csv')

時間列中的值不是 3,而是 c(3,3,3)。任何想法為什么會發生這種情況?
uj5u.com熱心網友回復:
我們可以使用n()來獲取計數而不是count像計數期望 data.frame 作為輸入并回傳一個 data.frame
library(dplyr)
df %>%
group_by(treatment) %>%
summarise(mean= mean(numb), sum=sum(numb), times = n()) %>%
mutate(thing = mean sum)
-輸出
# A tibble: 3 × 5
treatment mean sum times thing
<chr> <dbl> <dbl> <int> <dbl>
1 A 5.33 16 3 21.3
2 B 7 21 3 28
3 C 8 24 3 32
如果我們檢查str來自 OP 帖子的輸出的結構,就會清楚,即“times”列是 a,data.frame因為子集已完成,[2]而不是[[2]]提取為向量并[2]回傳具有單列的 data.frame。對于data.frame, even[,2]會在drop = TRUE默認情況下在 中作業data.frame,而在tibble或 中則不起作用data.table。更安全的是使用[[.
> str(df_test1)
tibble [3 × 5] (S3: tbl_df/tbl/data.frame)
$ treatment: chr [1:3] "A" "B" "C"
$ mean : num [1:3] 5.33 7 8
$ sum : num [1:3] 16 21 24
$ times :'data.frame': 3 obs. of 1 variable:
..$ n: int [1:3] 3 3 3
$ thing : num [1:3] 21.3 28 32
即如果我們這樣做 [[2]]
df_test1 <- df %>%
group_by(treatment) %>%
summarise(mean= (mean(numb)), sum=(sum(numb))) %>%
mutate(times = count(df, treatment)[[2]], thing = mean sum)
再次檢查結構
> str(df_test1)
tibble [3 × 5] (S3: tbl_df/tbl/data.frame)
$ treatment: chr [1:3] "A" "B" "C"
$ mean : num [1:3] 5.33 7 8
$ sum : num [1:3] 16 21 24
$ times : int [1:3] 3 3 3
$ thing : num [1:3] 21.3 28 32
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324583.html
標籤:r
上一篇:如何獲取一個資料框中的行順序以匹配另一個資料框中的其他行?
下一篇:如何獲得R中的特征向量串列
