如何使用条件(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
示例:给定一个包含
的数据框 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