【问题标题】:Add a column to a data. frame which evenly assign rows to values in a list为数据添加一列。将行均匀分配给列表中的值的框架
【发布时间】:2020-12-06 01:50:04
【问题描述】:

我有一个数据框,其中每一行都是一个家庭,我有一个采访者列表。目的是将访问员分配到住户,每个访问员应该在每个城市获得相同数量的住户。例如,

example <- data.frame(city = c("Los Angeles", "Los Angeles", "Los Angeles", 
                               "San Diego", "San Diego", "San Diego", "San Diego", "San Diego",
                               "Santa Barbara", "Santa Barbara", "Santa Barbara", "Santa Barbara", "Santa Barbara"), 
                      household_id = seq(1, 13))
interviewer <- c("A", "B", "C")

3位访谈员会去所有城市,每个城市大约会采访1/3的住户,所以预期产出是

output <- data.frame(city = c("Los Angeles", "Los Angeles", "Los Angeles", 
                               "San Diego", "San Diego", "San Diego", "San Diego", "San Diego",
                               "Santa Barbara", "Santa Barbara", "Santa Barbara", "Santa Barbara", "Santa Barbara"), 
                      household_id = seq(1, 13),
                     interviewer = c("A", "B", "C",
                                     "A", "A", "B", "B", "C",
                                     "A", "A", "B", "B", "C"))

【问题讨论】:

    标签: r dataframe tidyverse


    【解决方案1】:

    您可以尝试使用rep 为每个city 重复interviewer

    library(dplyr)
    
    example %>%
      group_by(city) %>%
      mutate(interviewer = rep(interviewer, length.out = n()))
    
    #   city          household_id interviewer
    #   <chr>                <int> <chr>      
    # 1 Los Angeles              1 A          
    # 2 Los Angeles              2 B          
    # 3 Los Angeles              3 C          
    # 4 San Diego                4 A          
    # 5 San Diego                5 B          
    # 6 San Diego                6 C          
    # 7 San Diego                7 A          
    # 8 San Diego                8 B          
    # 9 Santa Barbara            9 A          
    #10 Santa Barbara           10 B          
    #11 Santa Barbara           11 C          
    #12 Santa Barbara           12 A          
    #13 Santa Barbara           13 B          
    

    【讨论】:

    • 谢谢!这太优雅了! I. 不知道有一个 length.out 参数。
    猜你喜欢
    • 2020-05-23
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2021-10-21
    • 2018-11-12
    相关资源
    最近更新 更多