如何将一行一分为二,将一列中的值划分为两列,同时根据R中的条件从其他列复制值?

pdkcd3nj  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(111)

我需要复制数据集中的每一行,同时在两行之间划分一列的值,但如果满足条件,则保持其他值不变。我的数据看起来像这样:

df <- data.frame(ID = c("A","B","C"),
                 class = c(2,4,6),
                 value = c(100,150,100))

现在我想拆分每一行,将value在这两行之间划分,并根据前一个类为每一行分配两个不同的类。所以如果class = 2,分割后会是1和2,value在这两行之间平分。
所以它看起来像这样:

df1 <- data.frame(ID = c("A","A","B","B","C","C"),
                  class = c(1,2,3,4,5,6),
                  value = c( 50,50,75,75,50,50))
dpiehjr4

dpiehjr41#

您可以将两者bind_rows,同时将其中一个的class设置为class - 1,然后将value除以每组的观察数,然后将arrange按所需顺序计算。

library(tidyverse)

bind_rows(df, df %>% mutate(class = class - 1)) %>% 
  mutate(value = value/n(), .by = ID) %>% 
  arrange(ID, class)

#>   ID class value
#> 1  A     1    50
#> 2  A     2    50
#> 3  B     3    75
#> 4  B     4    75
#> 5  C     5    50
#> 6  C     6    50

相关问题