按行计算,在R中重复行名称

时间:2015-01-23 23:03:33

标签: r

我在R中有一个更大的数据框,我希望通过行名进行一些计算。下面部分显示的数据框包含236个气象站,每个站显示九次,因为每个站有每个天气变量九个单独的预报时间。事实上每小时都没有列在自己的专栏中这一事实无关紧要,因为我希望将降雪加在一起并平均风和温度。因此,我的最终数据帧将数据帧连接成236行(每个站一个),总降雪量,平均风速和平均温度。

我在apply系列中尝试了很多函数,并在dplyr包中尝试了这个函数,但它并不像行名。我也难以将数据帧变为实际格式(包括R的正确数据帧格式),以便行名称和天气变量可以一起进行计算。我将行名称列为一个字符,并将它们作为一个矩阵包含在原始数据框中,但这也不起作用。

坚持到这里,任何想法?

这是我的数据框的一小部分(这里的复制粘贴功能让我保持连贯的外观,所以我尽可能地添加了一个工作站,因此实际数据中的引用不是)我还没有图像权限。谢谢。

                    snowfall      sfc.wind             Tavg
EET - Alabaster, AL      "0"     "5.606221"       "45.38081"

编辑: 我被告知下面如何正确粘贴我的矩阵,这里是。

下面的肖恩代码修复了我的问题。它旁边有绿色复选标记。

                      snowfall  sfc.wind      Tavg
EET - Alabaster, AL  0.00000000 4.5129950 39.490030
EET - Alabaster, AL  0.00000000 4.5047869 36.087611
EET - Alabaster, AL  0.00000000 5.0126637 39.441394
EET - Alabaster, AL  0.00000000 5.0111759 45.682309
EET - Alabaster, AL  0.00000000 2.8716592 42.776499
EET - Alabaster, AL  0.00000000 2.7937856 37.322987
EET - Alabaster, AL  0.00000000 2.5351705 36.701948
EET - Alabaster, AL  0.00000000 1.9576756 34.456469
EET - Alabaster, AL  0.00000000 1.6846636 34.150641
BHM - Birmingham, AL 0.00000000 4.5466909 38.533949
BHM - Birmingham, AL 0.00000000 4.4607041 34.891818
BHM - Birmingham, AL 0.00000000 5.1888168 38.405422
BHM - Birmingham, AL 0.00000000 5.4596529 44.992042
BHM - Birmingham, AL 0.00000000 3.0826392 42.159321
BHM - Birmingham, AL 0.00000000 2.8546392 36.715275
BHM - Birmingham, AL 0.00000000 2.5729845 36.133261
BHM - Birmingham, AL 0.00000000 2.0355549 33.933232
BHM - Birmingham, AL 0.00000000 1.7289972 33.543341
DCU - Decatur, AL    0.00122047 3.6517845 34.109912
DCU - Decatur, AL    0.00000000 3.6832448 31.485904
DCU - Decatur, AL    0.00000000 4.2819648 35.502855
DCU - Decatur, AL    0.00000000 5.2777885 43.234060
DCU - Decatur, AL    0.00003937 3.0233904 40.613362
DCU - Decatur, AL    0.00003937 2.7680023 35.587844
DCU - Decatur, AL    0.00000000 2.0555607 34.899179
DCU - Decatur, AL    0.00000000 1.4499551 32.708740
DCU - Decatur, AL    0.00000000 1.2004947 32.616132

2 个答案:

答案 0 :(得分:1)

尝试使用tapply并假设您的数据框名为dat

with(dat, tapply(snowfall, rownames(dat) , 
                    function(x) sum(as.numeric(x),na.rm=TRUE) )
    )
#-----------
EET - Alabaster, AL    
                     0 

答案 1 :(得分:1)

R数据框不能有重复的行名,但矩阵可以。您需要一个数据框,因此您可以在不同的列中包含不同类型的数据。将具有重复行名称的矩阵转换为数据框时,行名称将被删除,因此您需要将它们作为列添加回来。

df <- data.frame(yourMatrix) # convert to data frame, drop row names
df <- cbind(station = rownames(yourMatrix), df) # add row names as column 

要对具有相同气象站的所有行应用操作,请使用dplyr。

library(dplyr)
df %>% 
    group_by(nameOfWeatherStationsColumn) %>% 
        summarize( 
            snowfall = sum(snowfall), 
            wind = mean(sfc.wind), 
            temp = mean(Tavg) 
        )