簡體   English   中英

根據條件將向量分配給變量

[英]Assign a vector to a variable based on criteria

  top5 <- ifelse(state = "PA", c("Oranges", "Bananas", "Avocados", "Tomatoes", "Cucumbers"),
             ifelse(state = "MA"), c("Oranges", "Bananas", "Peaches", "Leaves", "Cucumbers"),
             ifelse(state = "ME"), c("Oranges", "Bananas", "Avocados", "Tomatoes", "Watermelon"),
             ifelse(state = "NH"), c("Tea", "Bananas", "Avocados", "Tomatoes", "Cucumbers"),
             ifelse(state = "RI"), c("Oranges", "Coconuts", "Avocados", "Tomatoes", "Cucumbers"),
             ifelse(state = "VT"), c("Carrots", "Bananas", "Apples", "Tomatoes", "Cucumbers"))

以上是我目前所擁有的。 我想根據函數的輸入來分配相應的向量。 我將其放在函數內部,盡管即使在函數外部也無法使它正常工作。謝謝。

回答答案,這是很好的解決方案。 但是,我正在基於標准,將這些向量之一傳遞給變量,這是行不通的。

我需要執行此操作的原因是稍后調用該向量,以通過與狀態匹配的對應向量來過濾該狀態的數據。

例如,巴勒斯坦權力機構排名前五的水果是:“橙子”,“香蕉”,“鱷梨”,“西紅柿”,“黃瓜”。 如果函數需要PA,則需要將其分配給變量,以便函數以后可以將數據篩選為僅包含那些結果。 這是我的完整代碼:

FruitAnalyses <- function(statefile,state) 
top5 <- ifelse(state = "PA", c("Oranges", "Bananas", "Avocados", "Tomatoes", "Cucumbers"),
         ifelse(state = "MA"), c("Oranges", "Bananas", "Peaches", "Leaves", "Cucumbers"),
         ifelse(state = "ME"), c("Oranges", "Bananas", "Avocados", "Tomatoes", "Watermelon"),
         ifelse(state = "NH"), c("Tea", "Bananas", "Avocados", "Tomatoes", "Cucumbers"),
         ifelse(state = "RI"), c("Oranges", "Coconuts", "Avocados", "Tomatoes", "Cucumbers"),
         ifelse(state = "VT"), c("Carrots", "Bananas", "Apples", "Tomatoes", "Cucumbers"))

  statefile <- fread(paste0(state,"_fruit.csv"), header = T, data.table = F, 
stringsAsFactors = F, na.strings = c(",,",""," ")) 
#Lower names and convert to tbl
names(statefile) <- tolower(names(statefile))
statefile <- as.tbl(statefile)
#Parse Month and Year into single string - This is for later use when 
dates <-mdy(statefile$fruitstartdate)
statefile <- statefile %>%
 mutate(Month = month(dates, label = T))
rm(dates) 
statefileGrouped <- statefile %>%
  filter(priorfruitgroup %in% top5) %>%
  group_by(priorfruitgroup, Month) %>%
   summarise(TotalSeriousFruit = sum(seriousfruit),
            TotalFruitCount = sum(fruit)) %>%
  arrange(Month)
fwrite(statefileGrouped,file=paste0(state,".csv"))
barplot <- ggplot(statefileGrouped, aes(x=Month, y=Totalfruitcount, 
   fill=TotalotherfruitCount)) +
  geom_bar(color="black",stat="identity") +
  facet_grid(.~priorfruitgroup)
return(barplot)
}

忽略變量名稱中的差異,出於機密原因,我不得不更改一些名稱。 但是,這不是問題的主題。 我想知道為什么top5不會基於條件正確地分配給向量。

而不是使用ifelse ,我可能會選擇switch函數:

states <- c('PA', 'MA', 'ME', 'NH', 'RI', 'VT')

sapply(states, function(x){
  switch(x,
         PA = c("Oranges", "Bananas", "Avocados", "Tomatoes", "Cucumbers"),
         MA = c("Oranges", "Bananas", "Peaches", "Leaves", "Cucumbers"),
         ME = c("Oranges", "Bananas", "Avocados", "Tomatoes", "Watermelon"),
         NH = c("Tea", "Bananas", "Avocados", "Tomatoes", "Cucumbers"),
         RI = c("Oranges", "Coconuts", "Avocados", "Tomatoes", "Cucumbers"),
         VT = c("Carrots", "Bananas", "Apples", "Tomatoes", "Cucumbers"))
})

     PA          MA          ME           NH          RI          VT         
[1,] "Oranges"   "Oranges"   "Oranges"    "Tea"       "Oranges"   "Carrots"  
[2,] "Bananas"   "Bananas"   "Bananas"    "Bananas"   "Coconuts"  "Bananas"  
[3,] "Avocados"  "Peaches"   "Avocados"   "Avocados"  "Avocados"  "Apples"   
[4,] "Tomatoes"  "Leaves"    "Tomatoes"   "Tomatoes"  "Tomatoes"  "Tomatoes" 
[5,] "Cucumbers" "Cucumbers" "Watermelon" "Cucumbers" "Cucumbers" "Cucumbers"

可以如下操作:

xx <- sapply(states, function(x){
  switch(x,
         PA = c("Oranges", "Bananas", "Avocados", "Tomatoes", "Cucumbers"),
         MA = c("Oranges", "Bananas", "Peaches", "Leaves", "Cucumbers"),
         ME = c("Oranges", "Bananas", "Avocados", "Tomatoes", "Watermelon"),
         NH = c("Tea", "Bananas", "Avocados", "Tomatoes", "Cucumbers"),
         RI = c("Oranges", "Coconuts", "Avocados", "Tomatoes", "Cucumbers"),
         VT = c("Carrots", "Bananas", "Apples", "Tomatoes", "Cucumbers"))
})

apply(t(xx), 1, paste, collapse = ', ')

                                                PA 
 "Oranges, Bananas, Avocados, Tomatoes, Cucumbers" 
                                                MA 
    "Oranges, Bananas, Peaches, Leaves, Cucumbers" 
                                                ME 
"Oranges, Bananas, Avocados, Tomatoes, Watermelon" 
                                                NH 
     "Tea, Bananas, Avocados, Tomatoes, Cucumbers" 
                                                RI 
"Oranges, Coconuts, Avocados, Tomatoes, Cucumbers" 
                                                VT 
   "Carrots, Bananas, Apples, Tomatoes, Cucumbers" 

或者,您可以使用列表。

my.list <- list("PA"=c("Oranges", "Bananas", "Avocados", "Tomatoes", "Cucumbers"),
                "MA"=c("Oranges", "Bananas", "Peaches", "Leaves", "Cucumbers"),
                "ME"= c("Oranges", "Bananas", "Avocados", "Tomatoes", "Watermelon"),
                "NH"=c("Tea", "Bananas", "Avocados", "Tomatoes", "Cucumbers"),
                "RI"=c("Oranges", "Coconuts", "Avocados", "Tomatoes", "Cucumbers"),
                "VT"=c("Carrots", "Bananas", "Apples", "Tomatoes", "Cucumbers"))

然后可以這樣訪問:

my.list$NH
[1] "Tea"       "Bananas"   "Avocados"  "Tomatoes"  "Cucumbers"

要么:

x <- 'PA'
my.list[[x]]

使用變量時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM