【问题标题】:How do I create new rows in the dataframe using conditions (ifelse)?如何使用条件(ifelse)在数据框中创建新行?
【发布时间】:2018-06-29 07:41:08
【问题描述】:

示例:给定一个包含

的数据框
 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”列不为零并且新行将包含相同的用户和 project = 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 |

我曾想过在 ifelse 条件下使用 rbind,但我做不到。

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

【问题讨论】:

    标签: r conditional-statements plyr


    【解决方案1】:

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

    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
    

    【讨论】:

    • 谢谢!我以为我需要使用 rbind 和 ifelse,但这样就可以了。
    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    相关资源
    最近更新 更多