Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从R中的高数据或宽数据计算平均值_R_Dplyr_Reshape_Lapply_Purrr - Fatal编程技术网

从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

我是一个初级中级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 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
vs
Y
,并为每个
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的其他工具。它们非常有用,而且很容易理解。别忘了投票并接受!