r - R中数据框中的平均列

标签 r matrix dataframe average

我想平均 R 中包含整数值和偶尔包含 NA 的数据帧中的列。

名为 CD6(Climate Division 6)的数据框使用 NA 值进行初始化,以存储属于气候分部 6 的所有数据的平均值。行是日期,列表示从 0 到 23 的小时数。数据框如下所示:

    > CD6

       Date       H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 ... H23
       1948-07-01 NA NA NA NA NA NA NA NA NA NA NA  ... NA
       1948-07-02 NA NA NA NA NA NA NA NA NA NA NA  ... NA
       1948-07-03 NA NA NA NA NA NA NA NA NA NA NA  ... NA

名为 CA 的数据框具有所有气候分区的真实值,范围从 1 到 7。数据框如下所示:
    > CA

       Climate_Division  Date       H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 ... H23
       6                 1948-07-01 NA NA NA NA NA NA NA NA NA NA NA  ... NA
       5                 1948-07-01 0  1  1  3  0  0  0  0  0  0  0   ... 2
       6                 1948-07-01 0  1  1  3  0  0  0  0  0  0  0   ... 2
       6                 1948-07-01 1  0  0  5  7  0  1  1  1  0  0   ... 0
       6                 1948-07-02 0  2  1  2  1  1  NA 0  1  0  1  ... 2
       6                 1948-07-03 NA NA NA NA NA NA NA NA NA NA NA  ... NA

我有一个 for 循环编码,它将逐行遍历数据帧 CA 并映射到气候分区的正确数据帧(在本例中,气候分区 6 的 CD6)。一个问题是我不知道有多少行属于每个气候部门才能正确取平均值。

通过仅查看 CD6,我想获得特定时间的每个日期的平均值,如果存在真值并且最终答案是整数(值的上限),则不考虑 NA。如果各个气候部门的所有小时数都具有 NA 值,我想保留它以反对 0。CD6 的最终结果应该是这样的
    > CD6

       Date       H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 ... H23
       1948-07-01 1  1  1  4  4  0  1  1  1  0  0   ... 1
       1948-07-02 0  2  1  2  1  1  NA 0  1  0  1  ... 2
       1948-07-03 NA NA NA NA NA NA NA NA NA NA NA  ... NA

我不知道如何编码并熟练使用它。因此,任何建议都会有所帮助,并感谢您的时间。

最佳答案

您正在寻找的是通过对 CA 的两列进行分组来进行聚合的方法。即 Climate_DivisionDate .您可以使用内置 aggregate功能来做到这一点。

> t <- 'Climate_Division  Date       H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10
+ 6                 1948-07-01 NA NA NA NA NA NA NA NA NA NA NA
+ 5                 1948-07-01 0  1  1  3  0  0  0  0  0  0  0 
+ 6                 1948-07-01 0  1  1  3  0  0  0  0  0  0  0 
+ 6                 1948-07-01 1  0  0  5  7  0  1  1  1  0  0 
+ 6                 1948-07-02 0  2  1  2  1  1  NA 0  1  0  1 
+ 6                 1948-07-03 NA NA NA NA NA NA NA NA NA NA NA'
> 
> CA <- read.table(textConnection(t), header=T)
> 
> CA
  Climate_Division       Date H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10
1                6 1948-07-01 NA NA NA NA NA NA NA NA NA NA  NA
2                5 1948-07-01  0  1  1  3  0  0  0  0  0  0   0
3                6 1948-07-01  0  1  1  3  0  0  0  0  0  0   0
4                6 1948-07-01  1  0  0  5  7  0  1  1  1  0   0
5                6 1948-07-02  0  2  1  2  1  1 NA  0  1  0   1
6                6 1948-07-03 NA NA NA NA NA NA NA NA NA NA  NA
> #Now that we have our data, we do aggregation of data and calculate mean over that using following command
> CAMeans <- aggregate(CA[,3:13], by =list(CA[,1], CA[,2]), FUN = mean, na.rm = TRUE)
> 
> CAMeans
  Group.1    Group.2  H0  H1  H2  H3  H4  H5  H6  H7  H8  H9 H10
1       5 1948-07-01 0.0 1.0 1.0   3 0.0   0 0.0 0.0 0.0   0   0
2       6 1948-07-01 0.5 0.5 0.5   4 3.5   0 0.5 0.5 0.5   0   0
3       6 1948-07-02 0.0 2.0 1.0   2 1.0   1 NaN 0.0 1.0   0   1
4       6 1948-07-03 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
> 
> #Need to change the names of grouping column back to what they were before
> names(CAMeans)[1:2] <- c('Climate_Division', 'Date')
> 
> CAMeans
  Climate_Division       Date  H0  H1  H2  H3  H4  H5  H6  H7  H8  H9 H10
1                5 1948-07-01 0.0 1.0 1.0   3 0.0   0 0.0 0.0 0.0   0   0
2                6 1948-07-01 0.5 0.5 0.5   4 3.5   0 0.5 0.5 0.5   0   0
3                6 1948-07-02 0.0 2.0 1.0   2 1.0   1 NaN 0.0 1.0   0   1
4                6 1948-07-03 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
> 
> #Now you can subset CAMeans to get content for CD6
> CD6 <- CAMeans[CAMeans$Climate_Division == 6, 2:ncol(CAMeans)]
> 
> CD6
        Date  H0  H1  H2  H3  H4  H5  H6  H7  H8  H9 H10
2 1948-07-01 0.5 0.5 0.5   4 3.5   0 0.5 0.5 0.5   0   0
3 1948-07-02 0.0 2.0 1.0   2 1.0   1 NaN 0.0 1.0   0   1
4 1948-07-03 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

关于r - R中数据框中的平均列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14993571/

相关文章:

python - Pandas 用空白/空字符串替换 NaN

r - 如何减少ggplot绘图区域中的空白?

r - 将矩阵拆分为大小为 n 的 block ,偏移量为 i(矢量化方法)

c# - 帮我做一个算法来确定矩阵的等级

arrays - MATLAB 中的矩阵数组

python - 如何在 Pandas 数据框中删除唯一行?

r - 使用 dplyr 中的 group_by 函数来操作 data.frame 对象集

r - 使用 for 循环创建新变量的效率更高

r - R 中有哪些技术可以可视化 "distance matrix"?

r - 如何在 R 中为悬停文本配置千位分隔符?