【问题标题】:Replace values in a column with specific row value from same column using loop使用循环将列中的值替换为同一列中的特定行值
【发布时间】:2020-04-27 08:38:10
【问题描述】:

我从一项调查中获得的数据列出了收件人的姓名以及他们是否选择了该州的特定县。调查结构为未选择的任何县输出一个关闭,为选定的县输出一个。该州有大约 100 个县,因此最终会有很多列真正对应于同一个问题。我要做的是用县名替换任何带有 on 的单元格,用空白替换任何带有 off 的单元格。从那里我基本上可以毫不费力地将许多列合并为一列。下面我重新创建了一个简短的示例数据集

name <- c("Recipient", "AB", "BC", "DF", "EF", "WE")
Q1 <- c("County1", "Off", "On", "On", "Off", "Off")
Q2 <- c("County2", "On", "Off", "Off", "Off", "Off")
Q3 <- c("County3", "Off", "Off", "Off", "On", "On")
dt <- data.frame(name, Q1, Q2, Q3)
> dt
       name       Q1           Q2           Q3
1 Recipient  County1      County2      County3
2        AB      Off           On          Off
3        BC       On          Off          Off
4        DF       On          Off          Off
5        EF      Off          Off           On
6        WE      Off          Off           On

我正在寻找所需的输出

       name       Q1           Q2           Q3
1 Recipient  County1      County2      County3
1        AB               County2     
2        BC County1           
3        DF County1            
4        EF                             County3
5        WE                             County3

我不知道该怎么做,并指定第一行用于填充单元格。

感谢您的帮助。

【问题讨论】:

    标签: r loops replace dplyr


    【解决方案1】:

    我们创建一个逻辑向量并根据逻辑向量分配第一行值

    i1 <- dt[-1] == 'On'
    dt[-1][i1] <- unlist(dt[1, -1])[col(dt[-1])][i1]
    dt[-1][!i1] <- ""
    dt
    #       name       Q1       Q2       Q3
    #1 Recipient                           
    #2        AB          County 2         
    #3        BC County 1                  
    #4        DF County 1                  
    #5        EF                   County 3
    #6        WE                   County 3
    

    或者dplyr

    library(dplyr)
    dt %>% 
      mutate_at(vars(starts_with('Q')), ~ case_when(. == 'On' ~first(.), TRUE ~ ''))
    

    数据

    dt <- data.frame(name, Q1, Q2, Q3, stringsAsFactors = FALSE)
    

    【讨论】:

      猜你喜欢
      • 2017-04-28
      • 1970-01-01
      • 2021-03-23
      • 2020-04-13
      • 2016-02-04
      • 2019-03-28
      • 1970-01-01
      • 2020-07-04
      相关资源
      最近更新 更多