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)
正如您所看到的,有 value2和3,我想按该长度重复它们并将值更改回 1。我该怎么做?
我还想复制该A列,如您所见。
我试过:
replace(df[rep(rownames(df), select(df, -A)),], 2, 1)
Run Code Online (Sandbox Code Playgroud)
但这给了我一个错误。
一种选择是从 columns 获取最大值B,C并D使用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)
| 归档时间: |
|
| 查看次数: |
480 次 |
| 最近记录: |