簡體   English   中英

分組定義新變量,條件是另一個變量的值

[英]Making a new variable, means by group, conditional on value of another variable

我想找到創建新變量的最有效方法。 假設我有這個數據框:

set.seed(1234)
df <- data.frame(group = c(rep(1,4), rep(2,4)), X = rep(1:4, 2), G = sample(1:10, 8, replace = T) )

我想創建一個新變量,它是每個組中G的平均值,條件是X等於1或2。在示例df中,新變量將具有以下值:

df$newvar <- c(rep(4.5, 4), rep(8, 4))

有沒有一種方法可以在不重新使用數據框然后填充的情況下進行此操作? 這似乎很麻煩。 謝謝!

按“ group”分組后,根據“ X”上的邏輯條件filter “ G”個元素,並獲取這些值的mean ,以創建一個帶有mutate的新列

library(dplyr)
df %>%
    group_by(group) %>% 
    mutate(newvar = mean(G[X %in% 1:2]))
# A tibble: 8 x 4
# Groups:   group [2]
#  group     X     G newvar
#  <dbl> <int> <int>  <dbl>
#1     1     1     2    4.5
#2     1     2     7    4.5
#3     1     3     7    4.5
#4     1     4     7    4.5
#5     2     1     9    8  
#6     2     2     7    8  
#7     2     3     1    8  
#8     2     4     3    8  

或使用base R ave

df$newvar <- with(df, ave(G * NA^(!X %in% 1:2), group, 
                FUN = function(x) mean(x, na.rm = TRUE)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM