我有一個帶有一些重復測量的資料框。我想將這些重復的測量值提取到df2,然后計算它們的平均值,從原始 中洗掉重復項df,然后將計算出的平均值插入到原始 df 中。
library(dplyr)
df <- data.frame(id = c('01_01','01_01','01_02','01_03','01_04','01_04'),
variable_1 = c('a','a','a','a','a','a'),
value = c(0.5,0.7,0.8,0.2,1.2,2.2),
variable_2 = c('cat','cat','pig','dog','chicken','chicken'),
place = c('Australia','Australia','France','Belguim','Germany','Germany'))
df2 <- df %>%
group_by(id,variable_1,place) %>%
filter(n()==2) %>%
dplyr::summarise(value = mean(value))
df <- df %>%
group_by(id,variable_1,place) %>%
filter(n()==1) %>%
rbind(df2)
在取出重復項并使用匯總計算其平均值后,并非所有列df2都被保留。這意味著如果沒有為variable_2. 在保留原始資料框結構的同時,還有其他方法可以進行總結嗎?我顯然可以添加variable_2到 group_by 函式,但在我的實際資料集中有幾十列,這將是笨拙的。
id variable_1 value variable_2 place
<chr> <chr> <dbl> <chr> <chr>
1 01_02 a 0.8 pig France
2 01_03 a 0.2 dog Belguim
3 01_01 a 0.6 NA Australia
4 01_04 a 1.7 NA Germany
uj5u.com熱心網友回復:
如果您只是想獲得超過 1 行的任何組的平均值,那么您不需要分離出來,因為組中只有一行不會發生任何事情。在這里,我添加max了 for variable_2,以便它只回傳一個值并保留在輸出中。
library(tidyverse)
df %>%
group_by(id,variable_1,place) %>%
dplyr::summarise(value = mean(value), variable_2 = max(variable_2))
輸出
id variable_1 place value variable_2
<chr> <chr> <chr> <dbl> <chr>
1 01_01 a Australia 0.6 cat
2 01_02 a France 0.8 pig
3 01_03 a Belguim 0.2 dog
4 01_04 a Germany 1.7 chicken
或者,如果您確實想將其分解,則只需為 添加一個額外的摘要variable_2,這樣它就不會被洗掉。
df2 <- df %>%
group_by(id,variable_1,place) %>%
filter(n()==2) %>%
dplyr::summarise(value = mean(value), variable_2 = max(variable_2))
df <- df %>%
group_by(id,variable_1,place) %>%
filter(n()==1) %>%
bind_rows(., df2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/454432.html
上一篇:在R中將單列拆分為多列
