如何使用Summary从多个列中获取数据(仅对其中一列进行计算)?

如何使用Summary从多个列中获取数据(仅对其中一列进行计算)?,r,R,我有新生儿出生第一年的体重测量数据: Children <- data.frame(ID = c(1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4), age_days = c(0,12,25,33,38,2,25,38,45,18,38,40,60,1,5,10,20), weight = c(3.4,3.5,4.5,5.1,5.3,2.8,4.5,5.3,5.6,3.6,5.4,5.5,6.8,3.1,3.0,3.3,4.1)) 我尝试过使用summary函数,但

我有新生儿出生第一年的体重测量数据:

Children <- data.frame(ID = c(1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4),
age_days = c(0,12,25,33,38,2,25,38,45,18,38,40,60,1,5,10,20), 
weight = c(3.4,3.5,4.5,5.1,5.3,2.8,4.5,5.3,5.6,3.6,5.4,5.5,6.8,3.1,3.0,3.3,4.1))
我尝试过使用summary函数,但似乎找不到一种使用它获取权重的方法

Children%>%group\u by(ID)%>%summary(dis\u 2weeks=min(dis\u 2weeks),dis\u 1month=min(dis\u 1month))


谢谢你的帮助

也许有一个更优雅的解决方案,但这是可行的

库(tidyverse)
儿童%
嵌套()%>%
变异(新数据=映射(数据,最佳权重))%>%
选择(-data)%%>%
unnest(“新数据”)
#>#A tibble:4 x 5
#>#组:ID[4]
#>ID显示周体重显示周体重显示1个月体重显示1个月
#>                                 
#> 1     1          2           3.5          3           5.1
#> 2     2         11           4.5          5           4.5
#> 3     3          4           3.6          8           5.4
#> 4     4          4           3.3         10           4.1

由(v0.3.0)于2020-01-14创建的
dplyr::summary
将为您提供变量的摘要统计信息,因此询问
min(dis_2weeks)
将告诉您dis_2weeks的最小值是多少,但不会告诉您哪个观测值有它

有几种简单的方法可以做到这一点。最简单的方法可能是
dplyr::arrange()
数据,然后使用
dplyr::summary()
选择第一项:

library(dplyr)

Children <- data.frame(ID = c(1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4),
                       age_days = c(0,12,25,33,38,2,25,38,45,18,38,40,60,1,5,10,20), 
                       weight = c(3.4,3.5,4.5,5.1,5.3,2.8,4.5,5.3,5.6,3.6,5.4,5.5,6.8,3.1,3.0,3.3,4.1))

just_minimum <- Children %>%
  group_by(ID) %>%
  mutate(dis_2weeks = abs(14-age_days), dis_1month = abs(30-age_days)) %>%
  arrange(dis_2weeks) %>%
  summarize_all(first)

just_minimum
#一个tible:4 x 5
#组别:ID[4]
ID年龄天体重周数月数
1     1       12    3.5          2         18
2     2       25    4.5         11          5
3     3       18    3.6          4         12
4     4       10    3.3          4         20

你也可以在<代码> PMDPLYR 包中考虑<代码>突变子集< /代码> .< /P>附加注释:如果你使用Fielter()版本,请确保使用它的变量不具有精度/舍入问题,使得Min()与任何实际值都不匹配-您可以通过确保所有ID都是just_min版本来检查这一点。此外,mutate_子集建议用于确定真正的目标是否是采用这些ID特定的权重,并用它们填充原始数据的所有ID行。

  ID dis_2weeks weight_2weeks dis_1month weight_1month
1  1          2           3.5          3           5.1
2  2         11           4.5          5           4.5
3  3          4           3.6          8           5.4
4  4          4           3.3         10           4.1
library(dplyr)

Children <- data.frame(ID = c(1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4),
                       age_days = c(0,12,25,33,38,2,25,38,45,18,38,40,60,1,5,10,20), 
                       weight = c(3.4,3.5,4.5,5.1,5.3,2.8,4.5,5.3,5.6,3.6,5.4,5.5,6.8,3.1,3.0,3.3,4.1))

just_minimum <- Children %>%
  group_by(ID) %>%
  mutate(dis_2weeks = abs(14-age_days), dis_1month = abs(30-age_days)) %>%
  arrange(dis_2weeks) %>%
  summarize_all(first)

just_minimum
# A tibble: 4 x 5
     ID age_days weight dis_2weeks dis_1month
  <dbl>    <dbl>  <dbl>      <dbl>      <dbl>
1     1       12    3.5          2         18
2     2       25    4.5         11          5
3     3       18    3.6          4         12
4     4       10    3.3          4         20
just_min2 <- Children %>%
  group_by(ID) %>%
  mutate(dis_2weeks = abs(14-age_days), dis_1month = abs(30-age_days)) %>%
  filter(dis_2weeks == min(dis_2weeks))
just_min2
# A tibble: 4 x 5
# Groups:   ID [4]
     ID age_days weight dis_2weeks dis_1month
  <dbl>    <dbl>  <dbl>      <dbl>      <dbl>
1     1       12    3.5          2         18
2     2       25    4.5         11          5
3     3       18    3.6          4         12
4     4       10    3.3          4         20