【问题标题】:How can I group by two variable in R taking mean of all other variables?如何按 R 中的两个变量对所有其他变量取平均值?
【发布时间】:2022-11-10 21:37:47
【问题描述】:

我的数据框是:

M1T1 M1T2 M1T3 M2T1 M2T2 M2T3 M3T1 M3T2 M3T3 cntry_lan admdw
NA NA NA 1 2 2 1 1 2 ATGER group1
7 6 5 NA NA NA 6 6 5 ATGER group3
7 5 5 NA NA NA 7 4 4 ATGER group2

我的代码是:

mtmm_data1  %>%
  group_by(cntry_lan) %>% group_by(admdw)
  summarise_at(vars(M1MT1, M1T2, M1T3, M2T1, M2T2, M2T3, M3T1, M3T2, M3T3), list(name = mean))

我得到的错误:

UseMethod("tbl_vars") 中的错误: 没有适用于“tbl_vars”的方法应用于类“c('quosures','list')”的对象

每个count_lan 有三个组,即group1、group2 和group3。我想为每个国家/地区设置一行,然后为每个国家/地区设置三组。

【问题讨论】:

  • Stack Overflow 不是让别人写你的代码的地方为你,尽管社区非常愿意帮助您解决您在编写时遇到的具体问题为自己.到目前为止,您尝试了什么,为什么没有成功?
  • 我只是忘了输入我使用的代码。现在错误和代码在问题中共享。
  • 试试:mtmm_data1 %>% group_by(cntry_lan, admdw) %>% summarise(across(everything(), name = mean))

标签: r group-by


【解决方案1】:

你需要的函数是aggregate,你可以这样使用:

aggregate(x=df[,c("M1T1","M1T2","M1T3","M2T1","M2T2","M2T3","M3T1","M3T2","M3T3")], #column on which you want to apply a function
          by=list(country=df$country,grp=df$grp),#grouping variables
          FUN=mean)#function to apply

df 是您的数据框

【讨论】:

  • 非常感谢 NathanLVQ!它成功了。我很好奇为什么下面的代码不起作用mtmm_data1 %>% group_by(cntry_lan, admdw) %>% summarise(across(everything(), name = mean))
【解决方案2】:
df<-data.frame(cntry_lan = c("ATGER"),
               admdw = c("group1", "group2", "group3"),
               M1T1 = c(NA,1,2),
               M1T2 = c(1,10,3),
               M1T3 = c(10,NA,1))

library(tidyverse)

df %>% 
  rowwise() %>% 
  mutate(mean = mean(c_across(starts_with("M")), na.rm=T), .keep="unused") %>% 
  pivot_wider(names_from = admdw, values_from = mean)

#  cntry_lan group1 group2 group3
#  <chr>      <dbl>  <dbl>  <dbl>
#1 ATGER        5.5    5.5      2

【讨论】:

    猜你喜欢
    • 2017-10-13
    • 2019-08-18
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多