【问题标题】:dcast reporting 1 or 0 rather than actual valuesdcast 报告 1 或 0 而不是实际值
【发布时间】:2018-10-17 11:10:33
【问题描述】:

我有一个这种形式的数据框

familyid  Year  memberid value
1         2000  1        5
1         2000  2        6
2         2000  1        5
3         2000  1        7
3         2000  2        8
1         2002  1        5
1         2002  2        5
2         2002  1        6
3         2002  1        7
3         2002  2        8

我想按如下方式改造

familyid  Year  value_1 value_2
1         2000   5       6       
2         2000   5       NA
3         2000   7       8
1         2002   5       5
2         2002   6       NA
3         2002   7       8

换句话说,我想按 familyid 和 year 对我的 obs 进行分组,然后为每个 memberid 创建一个列,报告最后一列的相应值。每当该家庭只有一个成员时,我希望在与参考家庭的成员 2 关联的 value_2 列中有 NA 。

为此,我通常成功地使用以下代码

setDT(df)
dfnew<-data.table::dcast(df, Year + familyid ~ memberid, value.var=c("value"))

不幸的是这次我得到了这样的东西

familyid  Year  value_1 value_2
1         2000   1       1       
2         2000   1       0
3         2000   1       1
1         2002   1       1
2         2002   1       0
3         2002   1       1

换句话说,只要成员存在,我就会得到一个带有 1 的新数据框(实际上列 value_1 包含所有 1,因为所有家庭都至少有一个成员),只要成员不存在,就得到 0,而不管列“值”中的实际值”。有人知道为什么会这样吗?感谢您的宝贵时间。

【问题讨论】:

标签: r


【解决方案1】:

tidyverse:

 library(tidyverse)
 df<-read.table(text="familyid  Year  memberid value
 1         2000  1        5
 1         2000  2        6
 2         2000  1        5
 3         2000  1        7
 3         2000  2        8
 1         2002  1        5
 1         2002  2        5
 2         2002  1        6
 3         2002  1        7
 3         2002  2        8",header=T)

 df%>%
   group_by(familyid,Year)%>%
   spread(memberid,value)%>%
   arrange(Year)%>%
   mutate_at(c("1", "2"),.funs = funs( ifelse(is.na(.),0,1)))
# A tibble: 6 x 4
# Groups:   familyid, Year [6]
  familyid  Year   `1`   `2`
     <int> <int> <dbl> <dbl>
1        1  2000    1.    1.
2        2  2000    1.    0.
3        3  2000    1.    1.
4        1  2002    1.    1.
5        2  2002    1.    0.
6        3  2002    1.    1.

【讨论】:

    猜你喜欢
    • 2017-10-18
    • 2018-10-27
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多