如何按多列的值重复行并除以

U10*_*ard 5 r repeat dataframe

假设我有这个数据框:

> df <- data.frame(A=1:5, B=c(0, 0, 3, 0, 0), C=c(1, 0, 0, 1, 0), D=c(0, 2, 0, 0, 1))
> df
  A B C D
1 1 0 1 0
2 2 0 0 2
3 3 3 0 0
4 4 0 1 0
5 5 0 0 1
Run Code Online (Sandbox Code Playgroud)

我将如何将其转换为:

  A B C D
1 1 0 1 0
2 2 0 0 1
3 2 0 0 1
4 3 1 0 0
5 3 1 0 0
6 3 1 0 0
7 4 0 1 0
8 5 0 0 1
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,有 value23,我想按该长度重复它们并将值更改回 1。我该怎么做?

我还想复制该A列,如您所见。

我试过:

replace(df[rep(rownames(df), select(df, -A)),], 2, 1)
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误。

Ron*_*hah 3

一种选择是从 columns 获取最大值BCD使用pmax, useuncount重复行。用于pmin将大于 1 的值替换为 1。

library(dplyr)
library(tidyr)

df %>%
  mutate(repeat_row = pmax(B, C, D)) %>%
  uncount(repeat_row) %>%
  mutate(across(-A, pmin, 1))

#  A B C D
#1 1 0 1 0
#2 2 0 0 1
#3 2 0 0 1
#4 3 1 0 0
#5 3 1 0 0
#6 3 1 0 0
#7 4 0 1 0
#8 5 0 0 1
Run Code Online (Sandbox Code Playgroud)