按R中重复行名称的行计算

按R中重复行名称的行计算,r,R,我在R中有一个更大的数据框,我希望用它按行名进行一些计算。下面部分显示的数据框包含236个气象站,每个站显示9次,因为每个站对每个天气变量有9个单独的预测小时。事实上,每个小时都没有列在它自己的专栏里,这是无关紧要的,因为我想把降雪量加在一起,平均风和温度。因此,我的最终数据帧将数据帧连接成236行(每个站点一行),其中包含总降雪量、平均风速和平均温度 我在apply系列中尝试了许多函数,并在dplyr包中尝试了这些函数,但它不喜欢行名称。我也很难将数据帧转换为实际格式(包括R的正确数据帧格式)

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

我在apply系列中尝试了许多函数,并在dplyr包中尝试了这些函数,但它不喜欢行名称。我也很难将数据帧转换为实际格式(包括R的正确数据帧格式),这样行名称和天气变量就可以一起进行计算。我以字符的形式列出了行名称,并以矩阵的形式将它们绑定到原始数据帧中,但这也不起作用

困在这里,有什么想法吗

这是我的数据帧的一小部分(这里的复制粘贴功能无法让我保持一致的外观,因此我尽可能添加了一个站点,以便引号不在实际数据中),我还没有图像权限。谢谢

                    snowfall      sfc.wind             Tavg
EET - Alabaster, AL      "0"     "5.606221"       "45.38081"
编辑: 下面有人告诉我如何正确地粘贴到矩阵中

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

                      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

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

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

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

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

可能有助于对一行数据进行快速注释-它看起来像字符而不是数字。您可以使用
str(yourdata)
R数据帧不能有重复的行名称,但矩阵可以,这让我怀疑您的数据是矩阵。绝对试试df,好主意。你能再给我演示一下如何正确地发布代码吗?我正在尝试用{}{samples放置一个示例代码。打开的编辑框上方的图标包括一个看起来像成对花括号的图标。选择您的代码块,然后单击该图标。是的,这很好,但dplyr在几行代码中完成所有变量。我很欣赏这篇文章。很高兴看到它在基本代码中也能工作。
library(dplyr)
df %>% 
    group_by(nameOfWeatherStationsColumn) %>% 
        summarize( 
            snowfall = sum(snowfall), 
            wind = mean(sfc.wind), 
            temp = mean(Tavg) 
        )