r语言 - 从数据帧中获得唯一ID计数的个数,并为计数和值创建新的列

  • 本文关键字:创建 r语言 数据帧 唯一 ID reshape
  • 更新时间 :
  • 英文 :


我有一个数据帧重塑/计数问题。考虑以下数据帧,其中一列是非唯一的id和一个值列(可以是唯一的,但不一定是唯一的):

id<-c(1,1,1,2,2,3,4,4,4,4)
value_df<-c("A","B","C","D","E","F","G","H","I","J")
df<-data.frame(id,value_df)
  df
   id value_df
1   1        A
2   1        B
3   1        C
4   2        D
5   2        E
6   3        F
7   4        G
8   4        H
9   4        I
10  4        J

我要做的是创建一个数据框,其中第一列包含唯一的id,第二列是这些的计数,其余n列是每个id的值,像这样:

  df_counts_reshape
  id number_id value_df_1 value_df_2 value_df_3 value_df_4
1  1         3          A          B          C          N
2  2         2          D          E         <NA>       <NA>
3  3         1          F         <NA>       <NA>       <NA>
4  4         4          G          I          J          K

使用plyr-package派生计数很容易,如下所示

count(df,"id")

但是我的问题开始了。为了获得数据框架的其余部分,我尝试了meltdcast从shape2-package。

df_melted<-melt(df,id.vars =c("id"), measure.vars = c("value_df"))
df_cast<-dcast(df_melted,id~value)

但是,这会导致以下输出:

   df_cast
  id    A    B    C    D    E    F    G    H    I    J
1  1    A    B    C <NA> <NA> <NA> <NA> <NA> <NA> <NA>
2  2 <NA> <NA> <NA>    D    E <NA> <NA> <NA> <NA> <NA>
3  3 <NA> <NA> <NA> <NA> <NA>    F <NA> <NA> <NA> <NA>
4  4 <NA> <NA> <NA> <NA> <NA> <NA>    G    H    I    J

这个输出比我希望的有更多的"值"列,但我找不到一个简单的方法来简化它到我想要的输出。我还认为,最后一步得到number_id将与rbind。

不用说,我的实际数据帧包含数千行,这使得当前的melt/dcast输出非常笨拙,有数千列。

使用

df<-data.frame(id,value_df)
df$num <- ave(as.character(df$value_df), df$id, FUN = seq_along)
df = reshape(df,idvar = "id",direction = "wide",timevar = "num" )
结果:

> df
  id value_df.1 value_df.2 value_df.3 value_df.4
1  1          A          B          C       <NA>
4  2          D          E       <NA>       <NA>
6  3          F       <NA>       <NA>       <NA>
7  4          G          H          I          J

它所做的是为每组id添加一个顺序为1:n的数字列。然后使用这些值作为新的列名

相关内容

  • 没有找到相关文章

最新更新