我正在处理数据集,并希望对某些变量进行一些描述性统计,并将它们放在一个数据框中。 我可以处理这样的情况:
dt<-data.frame('X1'=rnorm(10),
'X2'=rnorm(10))
temp<-do.call(rbind, lapply(dt, summary))
还有这样的情况:
dt<-data.frame('X1'=rnorm(10),
'X2'=rnorm(10))
dt[1,2]<-NA
dt[2,1]<-NA
temp<-do.call(rbind, lapply(dt, summary))
但是当谈到下面的情况时,我不能:
dt<-data.frame('X1'=rnorm(10),
'X2'=rnorm(10))
dt[1,2]<-NA
temp<-do.call(rbind, lapply(dt, summary))
当某些变量包含NA而某些变量不包含NA时,不同变量的 lapply 的结果会有不同的列:
> lapply(dt, summary)
$X1
Min. 1st Qu. Median Mean 3rd Qu. Max.
-0.7821000 -0.2881000 -0.0003675 0.3195000 0.8114000 2.0230000
$X2
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
-1.336000 -0.604000 -0.005283 0.008491 0.784300 1.407000 1
在这种情况下rbind
将不再起作用。我确实知道有rbnd.fill
可以在数据帧具有不同列时进行行绑定但是将每个变量的结果传递到数据帧然后通过rbind.fill
将它们组合起来会是某种乏味的我会这样做相信有权力R有一个命令解决方案。
希望有人可以帮助我,你的时间和知识将深受赞赏!
答案 0 :(得分:4)
您可以将rbind.fill
与来自tidy
套餐的broom
合并,一次性获取,即
plyr::rbind.fill(lapply(dt, function(i) broom::tidy(summary(i))))
# minimum q1 median mean q3 maximum na
#1 -1.621968 -0.7001894 -0.2062857 0.06791479 0.5987752 2.4195609 NA
#2 -2.061762 -1.3925008 -1.1702881 -0.94991206 -0.9249380 0.6052219 1
答案 1 :(得分:2)
使用 tidyverse 方式的答案,即<Button x:Name="btn" Content="Hover me"/>
<TextBlock x:Name="tb" Text="Input">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=btn, Path=IsMouseOver}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetProperty="Opacity"
From="1.0" To="0.0" Duration="0:0:1"
AutoReverse="true" RepeatBehavior="1x">
</DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
主要是:
purrr
对于您正在做的事情,您也可以对ropensci社区正在进行的有关dt<-data.frame('X1'=rnorm(10),
'X2'=rnorm(10))
dt[1,2]<-NA
library(purrr)
library(broom)
dt %>%
map(., summary) %>%
map_df(broom::tidy)
#> minimum q1 median mean q3 maximum na
#> 1 -0.798480 0.5869163 0.89381256 0.9626454 1.6942529 2.218769 NA
#> 2 -1.331122 -1.0149286 0.05946167 -0.1562312 0.5235401 1.061640 1
一揽子计划的工作感兴趣。它不是在CRAN上,而是在github上。它旨在简化摘要统计使用,与 tidyverse 方法
skimr
答案 2 :(得分:0)
仅使用plyr
包,您可以将强制as
系列函数与plyr::rbind.fill
一起使用,以使用与原始帖子类似的代码来完成您想要的操作。 plyr::rbind.fill
需要data.frame,因此我们首先将summary
(命名向量)的输出转换为列表,然后使用as.data.frame.list
转换为data.frame。
do.call(plyr::rbind.fill, lapply(dt, function(x) as.data.frame.list(summary(x))))
返回
Min. X1st.Qu. Median Mean X3rd.Qu. Max. NA.s
1 -1.3228095 -0.9366220 0.3869426 0.05838389 0.85474059 1.1721839 NA
2 -0.8421435 -0.5083617 -0.4801625 -0.29357112 -0.02549078 0.4506287 1