【发布时间】:2017-02-25 02:25:26
【问题描述】:
我在这里查看了许多类似的问题,但找不到解决这种情况的答案。我的数据框是这样的:
SET SP T1 T2 T3
A dog 1 0 0
A cat 0 NA 4
A bird 5 0 NA
B cat 2 0 0
B bird NA 3 0
C dog 1 0 0
C cat 0 0 6
C bird 0 0 0
D dog NA 22 1
其中 SET 被故意重复多次,每条记录都包含一个 SP 和多个 TRIALS (T1-3) 的值。
我想要的是一个宽数据框,如下所示。没有任何类型的求和/平均/数学运算:
SET DOG_T1 DOG_T2 DOG_T3 CAT_T1 CAT_T2 CAT_T3 BIRD_T1 BIRD_T2 BIRD_T3
142 1 0 0 0 NA 4 5 0 NA
255 NA NA NA 2 0 0 NA 3 0
336 1 0 0 0 0 6 0 0 0
66 NA 22 1 NA NA NA NA NA NA
我尝试了以下方法,但收到错误,melt 和 dcast 默认为长度。这会将 SET 变量变成不同的数字,并且只为值填充 0 和 1。
df %>%
group_by(SET, SP) %>%
melt(id.vars = c('SET','SP')) %>%
data.table::dcast(SP + variable ~ SET, fun.aggregate = NULL, value.var = 'value')
这在我没有任何重复的 SET 时有效,但在我包含完整数据集后立即失败。 注意:我的真实数据框大约有 250 万行,所以速度很重要。
【问题讨论】:
标签: r data-cleaning