简单的数据帧到R中的复杂列表转换

问题描述:

需要创建一个选项组,供Shiny中的selectizeInput小部件使用。简单的数据帧到R中的复杂列表转换

开始样品数据帧

df <- data.frame("Region" = c("Eastern", "Eastern", "Western", "Western"), 
       "City" = c("New york", "New Jersey", "California", "Washington"), 
       "Abb" = c("NY", "NJ", "CA", "WA")) 

通缉名单

l <- list(Eastern = c(`New York` = 'NY', `New Jersey` = 'NJ'), 
    Western = c(`California` = 'CA', `Washington` = 'WA')) 

手册解决方案

Eastern <- df[which(df$Region == "Eastern"),] 
Western <- df[which(df$Region == "Western"),] 
list(Eastern = setNames(Eastern$Abb, Eastern$City), Western = setNames(Western$Abb, Western$City)) 

有没有更好的办法做到这一点

您可以试试split

with(df, split(setNames(as.character(Abb), City), Region)) 
#$Eastern 
# New york New Jersey 
#  "NY"  "NJ" 

#$Western 
# California Washington 
#  "CA"  "WA"