如何从行中重塑数据帧并以值为条件

时间:2016-02-28 01:32:58

标签: r dataframe

我是R的新手,我想这应该很容易。我有一个大数据,对于每个时期的每个组,可能有两个或三个变量来估计。数据如下所示:

for(i=0; i<high; i++) 
{
    for(j=0; j<width; j++)  
    {
        if(Img->imx[i*width+j]==0)
        {
        c=c+1;
        }                                                   

    }

现在我需要在每一组的每一轮中将所有信息汇总到一行。它需要的方式是行遍布列,提及它们的估计是否存在,如果不存在则为NaN。它看起来像这样:

df <- data.frame(
 group    = c(1, 1, 1, 1, 1),
 period   = c(1, 1, 1, 2, 2),
 term     = c("Inv", "Not", "Clue", "Mix", "Clue"),
 estimate = c(-1.2, -.85, -.35, -1, -.6),
 pvalue   = c(.001, .01, .00001, .0001, 001)
)

  group period term estimate pvalue
1     1      1  Inv    -1.20  1e-03
2     1      1  Not    -0.85  1e-02
3     1      1 Clue    -0.35  1e-05
4     1      2  Mix    -1.00  1e-04
5     1      2 Clue    -0.60  1e+00

有一种简单的方法吗?

2 个答案:

答案 0 :(得分:2)

除了dplyr方法之外,我们还可以使用dcast中的data.tablevalue.var可以使用多个setDT(df)列。我们转换了&#39; data.frame&#39;到&#39; data.table&#39; (dcast)并使用library(data.table) dcast(setDT(df), group+period~term, value.var= c("estimate", "pvalue"), sep=".") # group period estimate.Clue estimate.Inv estimate.Mix estimate.Not pvalue.Clue pvalue.Inv pvalue.Mix pvalue.Not #1: 1 1 -0.35 -1.2 NA -0.85 0.00001 0.001 NA 0.01 #2: 1 2 -0.60 NA -1 NA 1.00000 NA 0.0001 NA 转换为&#39; long&#39;广泛的&#39;格式。

Notification notification = new Notification.Builder(context)
    .setAutoCancel(true)
    .setContentTitle("title")
    .setContentText("message")
    .setWhen(System.currentTimeMillis())
    .setSmallIcon(getNotificationIcon())
    .build();



private static int getNotificationIcon() {
    boolean useWhiteIcon = (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP);
    return useWhiteIcon ? R.drawable.icon_loli : R.drawable.ic_launcher;
}

答案 1 :(得分:1)

您可以使用dplyr和tidyr包。首先,我使用gather()将数据放入长格式。您在一列中具有估计值和p值。您还在一列中有两个变量名称,我将其命名为foo。然后,我使用mutate()创建了您指定的列名。我删除了术语和foo,因为它们不再是必需的。最后,我使用spread()将数据重新整形为宽格式。

library(dplyr)
library(tidyr)

gather(df, foo, value, -c(group, period, term)) %>%
mutate(whatever = paste(term, foo, sep = ".")) %>%
select(-term, -foo) %>%
spread(whatever, value)

  group period Clue.estimate Clue.pvalue Inv.estimate Inv.pvalue Mix.estimate Mix.pvalue Not.estimate
1     1      1         -0.35       1e-05         -1.2      0.001           NA         NA        -0.85
2     1      2         -0.60       1e+00           NA         NA           -1      1e-04           NA
  Not.pvalue
1       0.01
2         NA