首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中重复行名的逐行计算

R中重复行名的逐行计算
EN

Stack Overflow用户
提问于 2015-01-23 23:03:33
回答 2查看 1.1K关注 0票数 1

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

我尝试过应用程序家族中的许多函数,并在dplyr包中尝试过这一点,但它不喜欢行名。我也很难将数据帧转换成实际格式(包括R的正确数据框架格式),这样行名和天气变量就可以一起计算。我将行名列为字符,并将它们作为矩阵绑定到原始数据框架中,但这也不起作用。

困在这里,有什么想法吗?

下面是我的数据框架的一小部分(这里的复制粘贴功能不会让我保持它的一致性,所以我尽可能地添加了一个站点,这样引号就不在实际数据中了),我还没有图像权限。谢谢。

代码语言:javascript
复制
                    snowfall      sfc.wind             Tavg
EET - Alabaster, AL      "0"     "5.606221"       "45.38081"

编辑:下面告诉我如何正确地粘贴在我的矩阵和它在这里。

肖恩下面的代码解决了我的问题。它旁边有绿色支票标记。

代码语言:javascript
复制
                      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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-24 01:24:38

R数据帧不能有重复的行名,但矩阵可以。您需要一个数据框架,这样您就可以在不同的列中拥有不同类型的数据。当将具有重复行名的矩阵转换为数据帧时,行名将被删除,因此需要将它们添加回列。

代码语言:javascript
复制
df <- data.frame(yourMatrix) # convert to data frame, drop row names
df <- cbind(station = rownames(yourMatrix), df) # add row names as column 

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

代码语言:javascript
复制
library(dplyr)
df %>% 
    group_by(nameOfWeatherStationsColumn) %>% 
        summarize( 
            snowfall = sum(snowfall), 
            wind = mean(sfc.wind), 
            temp = mean(Tavg) 
        )
票数 1
EN

Stack Overflow用户

发布于 2015-01-24 00:06:23

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

代码语言:javascript
复制
with(dat, tapply(snowfall, rownames(dat) , 
                    function(x) sum(as.numeric(x),na.rm=TRUE) )
    )
#-----------
EET - Alabaster, AL    
                     0 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28120156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档