如何使用条件(ifelse)在数据框中创建新行?

How do I create new rows in the dataframe using conditions (ifelse)?

示例:给定一个包含

的数据框
 df1 = data.frame(
 users=c("1", "1", "2", "2"), 
 projects=c("100", "101", "102", "103"), 
 from=c("0", "111", "0", "106"))

| users | projects | from |
|-------|----------|------|
|     1 |      100 |    0 |
|     1 |      101 |  111 |
|     2 |      102 |    0 |
|     2 |      103 |  106 |

我想在 "from" 列非零时在数据框中创建新行,新行将包含相同的用户和项目 = 来自值。

那我应该有,

df2 = data.frame(
users=c("1", "1", "1", "2", "2", "2"), 
projects=c("100", "101", "111", "102", "103", "106"), 
from=c("0", "111", "111","0", "106", "106"))

| users | projects | from |
|-------|----------|------|
|     1 |      100 |    0 |
|     1 |      101 |  111 |
|     1 |      111 |  111 |
|     2 |      102 |    0 |
|     2 |      103 |  106 |
|     2 |      106 |  106 |

我考虑过使用 rbind 和 ifelse 条件,但我做不到。

执行此数据帧的推荐方法是什么?谢谢。

创建一个包含新行的新数据框,然后将两个数据框绑定在一起。

library('tidyverse')

extras <- df1 %>%
  filter(from != 0) %>%
  mutate(projects = from)

bind_rows(df1, extras) %>%
  arrange(users, projects)
#>   users projects from
#> 1     1      100    0
#> 2     1      101  111
#> 3     1      111  111
#> 4     2      102    0
#> 5     2      103  106
#> 6     2      106  106