Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何从包含x个可能组的矩阵中提取平均值_R - Fatal编程技术网

R 如何从包含x个可能组的矩阵中提取平均值

R 如何从包含x个可能组的矩阵中提取平均值,r,R,假设我有以下示例数据集: df1 = ID Group_Type Units 1 A 10 2 A 12 3 A 17 4 B 6 5 B 9 6 D 23 7 D 16 8 D 21 9 G

假设我有以下示例数据集:

df1 = 
ID    Group_Type    Units
 1       A           10
 2       A           12
 3       A           17
 4       B            6
 5       B            9
 6       D           23
 7       D           16
 8       D           21
 9       G           40
10       G           31
组类型可能是英文字母表中A和Z之间的任何字母。是否有一种方法可以同时检测a、B、D和G组(或任何现有组),然后平均每个组的单位,并将整个结果分配给矩阵?我想它看起来会像这样:

      [,1]
[1,]   13
[2,]   7.5
[3,]   20
[4,]   35
([1,]=A等等……[1]=每组平均值)


我知道如何分别完成这些任务,但我不知道如何将其组合成一段可管理的代码。我最近使用了table、unlist和grep来挑选数据框中的单词,但我无法从中找出更多的单词。

假设“df1”是一个“data.frame”。如果它是一个“矩阵”(我对此表示怀疑)

或使用
base R

aggregate(Units~Group_Type, df1, FUN=mean, na.action=NULL)
#  Group_Type Units
#1          A  13.0
#2          B   7.5
#3          D  20.0
#4          G  35.5
数据表

library(data.table)
setDT(df1)[, list(Units=mean(Units)), Group_Type]
#    Group_Type Units
#1:          A  13.0
#2:          B   7.5
#3:          D  20.0
#4:          G  35.5
对于
dplyr
data.table
aggregate
,您可以使用选项
na.rm=TRUE
平均值计算中删除
na
值。i、 e.
平均值(单位,na.rm=TRUE)
对于
dplyr/data.table
..,FUN=mean,na.rm=TRUE,na.action=NULL)
对于
聚合

sqldf
。默认情况下,
avg
将删除
NA/null

library(sqldf)
sqldf('select Group_Type,
        avg(Units) as Units 
        from df1 
        group by Group_Type',
        method = "raw")
 #   Group_Type Units
 #1          A  13.0
 #2          B   7.5
 #3          D  20.0
 #4          G  35.5
假设“组类型”的“单位”中缺少一个if值,并希望输出为
NA

 df1$Units[3] <- NA
 sqldf('select Group_Type,
           case when count(Units) = count(*) 
                then avg(Units) 
                else null 
                end as Units
           from df1 
           group by Group_Type',
           method="raw")
 #   Group_Type Units
 #1          A  <NA>
 #2          B   7.5
 #3          D  20.0
 #4          G  35.5

df1$Units[3]假设“df1”是一个“data.frame”。如果它是一个“矩阵”(我对此表示怀疑)

或使用
base R

aggregate(Units~Group_Type, df1, FUN=mean, na.action=NULL)
#  Group_Type Units
#1          A  13.0
#2          B   7.5
#3          D  20.0
#4          G  35.5
数据表

library(data.table)
setDT(df1)[, list(Units=mean(Units)), Group_Type]
#    Group_Type Units
#1:          A  13.0
#2:          B   7.5
#3:          D  20.0
#4:          G  35.5
对于
dplyr
data.table
aggregate
,您可以使用选项
na.rm=TRUE
平均值计算中删除
na
值。i、 e.
平均值(单位,na.rm=TRUE)
对于
dplyr/data.table
..,FUN=mean,na.rm=TRUE,na.action=NULL)
对于
聚合

sqldf
。默认情况下,
avg
将删除
NA/null

library(sqldf)
sqldf('select Group_Type,
        avg(Units) as Units 
        from df1 
        group by Group_Type',
        method = "raw")
 #   Group_Type Units
 #1          A  13.0
 #2          B   7.5
 #3          D  20.0
 #4          G  35.5
假设“组类型”的“单位”中缺少一个if值,并希望输出为
NA

 df1$Units[3] <- NA
 sqldf('select Group_Type,
           case when count(Units) = count(*) 
                then avg(Units) 
                else null 
                end as Units
           from df1 
           group by Group_Type',
           method="raw")
 #   Group_Type Units
 #1          A  <NA>
 #2          B   7.5
 #3          D  20.0
 #4          G  35.5

df1$Units[3]非常感谢您的选择!我现在使用的是base R,但我肯定对dplyr感兴趣。对于这种类型的数据操作,您更喜欢哪一种?@Adam
数据表
dplyr
版本比
聚合
版本快。我会记住这一点,谢谢。如果“单位”部分中确实存在NA值,是否有办法在结果中保留NA值?我已尝试将na.rm转换为FALSE,但无效。@Adam
mean
中的默认选项将是
na.rm=FALSE
。因此,如果每个组类型的单位有一个NA值,则该平均值将为NA。你为什么需要这样?对于
aggregate
,您可能需要
na.action=NULL
我感谢所有的帮助--我只用了17行代码就编写了一段代码,通过对我们最常见的问题之一进行数据分析,我的实验室每个人都将节省大量时间。我的第一个真正的节目!我很感激你的选择!我现在使用的是base R,但我肯定对dplyr感兴趣。对于这种类型的数据操作,您更喜欢哪一种?@Adam
数据表
dplyr
版本比
聚合
版本快。我会记住这一点,谢谢。如果“单位”部分中确实存在NA值,是否有办法在结果中保留NA值?我已尝试将na.rm转换为FALSE,但无效。@Adam
mean
中的默认选项将是
na.rm=FALSE
。因此,如果每个组类型的单位有一个NA值,则该平均值将为NA。你为什么需要这样?对于
aggregate
,您可能需要
na.action=NULL
我感谢所有的帮助--我只用了17行代码就编写了一段代码,通过对我们最常见的问题之一进行数据分析,我的实验室每个人都将节省大量时间。我的第一个真正的节目!