R 按ID重塑数据帧

R 按ID重塑数据帧,r,reshape,R,Reshape,我有一个像这样的数据集 id age edu blood 1 30-39 Primary 5.5 1 20-29 Secondary 8.7 1 30-39 Primary 10 2 30-39 Primary 11 2 20-29 Secondary 10 2 20-29 Secondary 9 id age30_39count age20_

我有一个像这样的数据集

id  age edu blood       
1   30-39   Primary 5.5     
1   20-29   Secondary   8.7     
1   30-39   Primary 10      
2   30-39   Primary 11      
2   20-29   Secondary   10      
2   20-29   Secondary   9       
id  age30_39count   age20_29count   edu_pri_count   edu_sec_count   blood_median
1   2   1   2   1   8.7
2   1   2   1   2   10
我希望id明智的输出如下:

id  age30_39count   age20_29count   edu_pri_count   edu_sec_count   blood_median
1   2   1   2   1   8.7
2   1   2   1   2   10
我试过R代码:

id  age30_39count   age20_29count   edu_pri_count   edu_sec_count   blood_median
1   2   1   2   1   8.7
2   1   2   1   2   10
library(dplyr)
library(tidyr)

ddply(dat, "id", spread, age, age, edu, edu, blood, blood_median=median(blood))
但它并没有显示出预期的效果。有人能帮忙吗?

你是说这样吗

id  age30_39count   age20_29count   edu_pri_count   edu_sec_count   blood_median
1   2   1   2   1   8.7
2   1   2   1   2   10
> library(dplyr)
> library(tidyr)
> group_by(df,id,age) %>% gather(variable,value,age,edu) %>% 
    unite(tag,variable,value) %>% 
    mutate(medblood=median(blood)) %>% 
    spread(tag,id) %>% select(-blood) %>% 
    select(-medblood,medblood)
# A tibble: 6 x 5
  `age_20-29` `age_30-39` edu_Primary edu_Secondary medblood
        <int>       <int>       <int>         <int>    <dbl>
1          NA           1           1            NA     8.70
2           1          NA          NA             1     8.70
3           2          NA          NA             2    10.0 
4          NA           1           1            NA     8.70
5           2          NA          NA             2    10.0 
6          NA           2           2            NA    10.0 
以下是本例中使用的数据
df
dput

id  age30_39count   age20_29count   edu_pri_count   edu_sec_count   blood_median
1   2   1   2   1   8.7
2   1   2   1   2   10
> dput(df)
structure(list(id = c(1L, 1L, 1L, 2L, 2L, 2L), age = structure(c(2L, 
1L, 2L, 2L, 1L, 1L), .Label = c("20-29", "30-39"), class = "factor"), 
edu = structure(c(1L, 2L, 1L, 1L, 2L, 2L), .Label = c("Primary", 
"Secondary"), class = "factor"), blood = c(5.5, 8.7, 10, 
11, 10, 9)), .Names = c("id", "age", "edu", "blood"), class = "data.frame", row.names = c(NA, 
-6L))
你是说像这样

id  age30_39count   age20_29count   edu_pri_count   edu_sec_count   blood_median
1   2   1   2   1   8.7
2   1   2   1   2   10
> library(dplyr)
> library(tidyr)
> group_by(df,id,age) %>% gather(variable,value,age,edu) %>% 
    unite(tag,variable,value) %>% 
    mutate(medblood=median(blood)) %>% 
    spread(tag,id) %>% select(-blood) %>% 
    select(-medblood,medblood)
# A tibble: 6 x 5
  `age_20-29` `age_30-39` edu_Primary edu_Secondary medblood
        <int>       <int>       <int>         <int>    <dbl>
1          NA           1           1            NA     8.70
2           1          NA          NA             1     8.70
3           2          NA          NA             2    10.0 
4          NA           1           1            NA     8.70
5           2          NA          NA             2    10.0 
6          NA           2           2            NA    10.0 
以下是本例中使用的数据
df
dput

id  age30_39count   age20_29count   edu_pri_count   edu_sec_count   blood_median
1   2   1   2   1   8.7
2   1   2   1   2   10
> dput(df)
structure(list(id = c(1L, 1L, 1L, 2L, 2L, 2L), age = structure(c(2L, 
1L, 2L, 2L, 1L, 1L), .Label = c("20-29", "30-39"), class = "factor"), 
edu = structure(c(1L, 2L, 1L, 1L, 2L, 2L), .Label = c("Primary", 
"Secondary"), class = "factor"), blood = c(5.5, 8.7, 10, 
11, 10, 9)), .Names = c("id", "age", "edu", "blood"), class = "data.frame", row.names = c(NA, 
-6L))

谢谢你的解决方案非常接近。但是我如何才能只保留包含所有信息的唯一行呢?在运行代码之后,我得到了这些结果:#A tibble:5x5
年龄20-29
年龄30-39edu#u初级教育#次级医疗血液1NA 1NA 9.502 1NA 1NA 19.503 2 NA2 9.50 4 2 1 2 9.50 5 NA 2 2 NA 9.50谢谢你,一吨!这正是我正在探索的。但在运行代码后,会出现错误消息:“计数错误(,medblood,id,tag):未使用的参数(tag)”我只是
dput
我使用的样本数据的版本(从您的问题中剪切粘贴)。请尝试在此基础上运行代码,以防结构的数据类型出现问题。谢谢。你的解决方案非常接近。但是我如何才能只保留包含所有信息的唯一行呢?在运行代码之后,我得到了这些结果:#A tibble:5x5
年龄20-29
年龄30-39edu#u初级教育#次级医疗血液1NA 1NA 9.502 1NA 1NA 19.503 2 NA2 9.50 4 2 1 2 9.50 5 NA 2 2 NA 9.50谢谢你,一吨!这正是我正在探索的。但在运行代码后,会出现错误消息:“计数错误(,medblood,id,tag):未使用的参数(tag)”我只是
dput
我使用的样本数据的版本(从您的问题中剪切粘贴)。如果结构的数据类型出现问题,请尝试在此基础上运行代码。@Aspirigurbandatascientist Reformate在这里有点误导,因为OP希望通过不同的方式按
id
聚合列:将
age
edu
制成表格,并计算
blood
的中值。我不确定链接的问题是否涵盖了这种情况。@aspiringurbandatascientist Reformate在这里有点误导,因为OP希望以不同的方式按
id
聚合列:将
age
edu
制成表格,并计算
blood
的中值。我不确定相关问题是否涉及这一案件。