从R中的高数据或宽数据计算平均值
我是一个初级中级R用户,几个月前开始为实验室研究学习R。谢谢你的耐心,尤其是如果这是一个非常愚蠢的简单问题 问题 这些表格是一个可复制的示例 下面的代码生成与我的集合类似的表,第一个是高数据,第二个是宽数据从R中的高数据或宽数据计算平均值,r,dplyr,reshape,lapply,purrr,R,Dplyr,Reshape,Lapply,Purrr,我是一个初级中级R用户,几个月前开始为实验室研究学习R。谢谢你的耐心,尤其是如果这是一个非常愚蠢的简单问题 问题 这些表格是一个可复制的示例 下面的代码生成与我的集合类似的表,第一个是高数据,第二个是宽数据 库(TIBLE) #>警告:包“tibble”是在R版本3.4.4下构建的 图书馆(tidyr) #>警告:程序包“tidyr”是在R版本3.4.4下构建的 高#一个tibble:6 x 3 #>X Y S #> #> 1 3999. 3.07 s1 #> 2 3999. 1.81
库(TIBLE)
#>警告:包“tibble”是在R版本3.4.4下构建的
图书馆(tidyr)
#>警告:程序包“tidyr”是在R版本3.4.4下构建的
高#一个tibble:6 x 3
#>X Y S
#>
#> 1 3999. 3.07 s1
#> 2 3999. 1.81 s2
#> 3 3999. 4.02 s3
#> 4 3999. 1.21 s1
#> 5 3999. 0.771 s2
#> 6 3999. 2.39 s3
宽#A tible:3 x 6
#>S`3998.102``3998.423``3998.745``3999.066``3999.387`
#>
#>1 s1 0.454 1.50 1.84 1.21 3.07
#>2 s2 2.04 0.392 1.50 0.771 1.81
#>3 s3 1.38 0.992 0.790 2.39 4.02
由(v0.2.1)于2018年11月8日创建
在高版本中,X
的每个唯一值都会重复,无论S
有多少个唯一值。有5个唯一的X
和3个唯一的S
。这在广泛的数据中更为明显。在我的真实集合中,我有8010个唯一X
和312个唯一S
。高数据很好,因为我可以轻松绘制X
vsY
,并为每个S
绘制一条线
问题
如果我想在X
的每个唯一值处平均所有Y
s,该怎么办?它看起来是这样的:
#tible:5 x 2
>xy
>
> 1 3998.102 2.29
> 2 3998.423 1.63
> 3 3999.745 1.36
> 4 3999.066 1.66
> 5 3999.387 1.33
在本例中,我使用宽表,计算每个X
列的平均值,然后手动构建一个新表
我可以使用purr
中的map()
函数执行此操作吗?文档很混乱,可能是因为我以前从未使用过lappy()
函数
谢谢你的阅读。我觉得这对大多数有经验的用户来说都很简单。您需要的是
dplyr
软件包,它是tidyverse的核心。我将向您展示如何使用它实现您想要实现的目标,但是有大量的在线教程,一旦您了解了如何使用它,这将非常简单
require(dplyr)
group_by(tall,X) %>%
summarize(meanY=mean(Y))
首先,您可以告诉dplyr做任何您想做的事情,就好像您的数据根据分组列(在本例中为X)被分解为单独的data.frames一样。
另外,请注意,使用dplyr,您可以使用%%>%%
来“管道”命令,这意味着一个命令的结果将作为其第一个参数传输到下一个命令,因此您不需要每次都分配它或嵌套所有命令
第二行创建一个新表,其中对于每个组(基于其X),它计算所有Y
s的mean
。结果是:
# A tibble: 5 x 2
X meanY
<dbl> <dbl>
1 3998. 0.781
2 3998. 1.81
3 3999. 1.37
4 3999. 2.01
5 3999. 2.02
#一个tible:5 x 2
X meanY
1 3998. 0.781
2 3998. 1.81
3 3999. 1.37
4 3999. 2.01
5 3999. 2.02
就这样。你完了。它功能强大,简单易学。
您可以使用的另一个软件包是data.table
,但我发现它的强大性和简洁性是以学习难度大为代价的(无论如何,对我来说)。使用dplyr可能需要更多的行来完成任务,但对于我来说,通过这些步骤来完成任何事情都更容易
祝你好运 好吧,这个问题提出得很好,但可能太长了。看看这是否能满足您的需要:
library(dplyr);高%>%group_by(X)%%>%SUMMARESE(mean_y=mean(y))
如果这是正确的,我将添加它作为答案并详细解释,我只是想确保这是您需要的。尝试删除问题中eccess中的所有内容,这也会帮助其他人。谢谢,我会将您的解决方案调整到我的大集合中,看看它是否有效。似乎有可能。我也短路了柱子。谢谢,时间实在太长了。我刚刚在我的大数据集上试用了这个,效果很好!非常感谢您的回复!哇!这比我想做的容易多了。你和@RLave有相同的解决方案。我以前在filter()
和select()
中使用过dplyr
,但不知道groupby()%%>%summary()
。非常感谢您的回复。太好了。很高兴我能帮忙。更多地了解总结
,以及变异
(通过计算创建新变量),以及dplyr的其他工具。它们非常有用,而且很容易理解。别忘了投票并接受!