如何有条件地复制和编辑r中的行

qyyhg6bp  于 2023-02-10  发布在  其他
关注(0)|答案(2)|浏览(100)

我需要向 Dataframe 中添加2行,这些行的值与现有行的值相同。例如,下面我需要添加"a"= 3,其中"b"值与"a"= 2的值相同,如下所示:

| a | b     |
| --| ------|
| 1 | higha |
| 1 | lowa  |
| 2 | highb |
| 2 | lowb  |

改为:

| a | b     |
| --| ------|
| 1 | higha |
| 1 | lowa  |
| 2 | highb |
| 2 | lowb  |
| 3 | highb |
| 3 | lowb  |
qybjjes1

qybjjes11#

以R为底数的一行代码为:

`rownames<-`(rbind(df, within(df[df$a == 2,], a <- 3)), NULL)
#>   a     b
#> 1 1 higha
#> 2 1  lowa
#> 3 2 highb
#> 4 2  lowb
#> 5 3 highb
#> 6 3  lowb
7xllpg7q

7xllpg7q2#

我们可以使用

library(dplyr)
library(tidyr)
df %>%
   uncount((a == 2)+1) %>%
   mutate(a = replace(a, duplicated(b) & a == 2, 3)) %>%
   arrange(a)
  • 输出
# A tibble: 6 × 2
      a b    
  <dbl> <chr>
1     1 higha
2     1 lowa 
3     2 highb
4     2 lowb 
5     3 highb
6     3 lowb

或使用base R

i1 <- df$a == 2
df[nrow(df) + seq_len(sum(i1)),] <- data.frame(a = 3, b = df$b[i1])

数据

df <- data.frame(a = rep(1:2, each = 2), 
   b = c("higha", "lowa", "highb", "lowb"))

相关问题