[英]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.