返回一列的乘法

use*_*708 6 r dataframe

在下面,数据帧索引表示该值,而 t1:t2 表示该特定值在特定时间点被记录的次数。例如,t1 处的索引 10 等于 1,表明它有 1 个记录;在 t2 处有 4 条记录,整个 t3 和 t4 处只有 1 条记录。我想根据索引列返回 t1:t4 列中的值

输入:

index t1 t2 t3 t4
   10  1  4  1  1
   20  2  5  1  0
   30  3  6  1  0
   40  0  0  0  2 

Output:

       t1 t2  t3 t4
       10 10  10 10
       20 10  20 40
       20 10  30 40
       30 10  NA NA
       30 20  NA NA
       30 20  NA NA
       NA 20  NA NA
       NA 20  NA NA
       NA 30  NA NA  
       NA 30  NA NA
       NA 30  NA NA
       NA 30  NA NA
       NA 30  NA NA
       NA 30  NA NA
       
Run Code Online (Sandbox Code Playgroud)

样本数据:

df<-structure(list(index=c (10,20,30,40), 
                   t1 = c(1, 2, 3, 0), 
                   t2 = c(4, 5, 6, 0), 
                   t3 = c(1, 1,1,  0),
                   t4 = c(1, 0, 0, 2)), row.names = c(NA,4L), class = "data.frame")
                                                            
df
Run Code Online (Sandbox Code Playgroud)

tmf*_*mnk 7

dplyrtidyrpurrr解决方案可能是:

map(.x = names(df)[-1],
    ~ df %>%
     uncount(get(.x)) %>%
     select(!!.x := index) %>%
     rowid_to_column()) %>%
 reduce(full_join)

   rowid t1 t2 t3 t4
1      1 10 10 10 10
2      2 20 10 20 40
3      3 20 10 30 40
4      4 30 10 NA NA
5      5 30 20 NA NA
6      6 30 20 NA NA
7      7 NA 20 NA NA
8      8 NA 20 NA NA
9      9 NA 20 NA NA
10    10 NA 30 NA NA
11    11 NA 30 NA NA
12    12 NA 30 NA NA
13    13 NA 30 NA NA
14    14 NA 30 NA NA
15    15 NA 30 NA NA
Run Code Online (Sandbox Code Playgroud)


pol*_*kas 5

基础 R 和一行代码。

Map(function(x) rep(df$index, x), df[,-1])
Run Code Online (Sandbox Code Playgroud)

更新后:

maxy <- max(apply(df[,-1], 2, sum))
data.frame(Map(function(x) c(rep(df$index, x), rep(NA, maxy - sum(x))), df[,-1]))
Run Code Online (Sandbox Code Playgroud)