[英]How to revalue elements in factor based on values of arguments, passed to the function in R
早上好,
你能幫我解決以下問題嗎? 我有一個函數,我向它傳遞某些作為因子水平的值。 我想根據這個值重新評估因子水平。
例如,如果我想重估因子my_factor
("cats" -> "animals", "pines" -> "trees") 中的my_factor <- revalue(my_factor, c("cats"="animals", "pines"="trees"))
,我使用: my_factor <- revalue(my_factor, c("cats"="animals", "pines"="trees"))
。 但是現在我想根據傳遞給函數的參數值重新評估級別:
myFunction(..., member1 = "cats", member2 = "pines") {
my_factor <- revalue(my_factor, c(member1="animals", member2="trees"))
}
此代碼片段不起作用( Error: The following
x values were not present in
Error: The following
values were not present in
: member1, member2
)。
請告訴我如何正確操作? 也許我需要使用revalue
以外的東西。
問候, Poecile
您引用了plyr
,但該軟件包已過時,通常不建議使用它。 我不打算以dplyr
方式嘗試解決方案,因為我對它的各種抽象級別沒有足夠的掌握。
基本函數levels<-
將干凈利落地做到這一點。 當您執行以下操作時:
levels(fac)[some_index] <- "something"
您可以更改該級別的打印值而不更改攜帶信息的因子整數的基本模式。 因此,使用`levels(fac),一次獲取級別的當前值以創建一個邏輯索引以在“[”內部使用,並再次在“外部”上進行重新分配:
levels(fac)[ levels(fac) == "cats"] <- "animals"
levels(fac)[ levels(fac) == "pines"] <- "trees"
您實際上使用了兩個不同的函數: levels<-
(在外部)和levels
(在內部)。 為了使這個過程成為可以處理任意數量的重新分配的函數,您需要將重新分配對包含在列表列表中,以便您可以迭代這些對。 您當前的請求正在嘗試使用類似語言的表達式,例如"cats" = "animals"
,但這會創建一個名為cats
的參數,其值為"animals"
reval <- function(x)(fac, reassign) {
lapply(reassign, function(fac, pair) {
levels(col)[levels(col)==pair[[1]]] <-pair[[2]]}
return(fac) }
你會這樣稱呼它:
facname <- reval ( facname, list( list("curlev1", "newlev1"),
list("curlev2", "newlev2")) ) )
如果您在使用“my_factor ("cats" -> "animals", "pines" -> "trees")” 命名的示例中有一個示例,然后使用以下命令對其進行測試
my_factor <- reval( my_factor, reassign = list (list("cats" , "animals"),
list("pines" , "trees") ) )
如果它不起作用,那么您應該發布 R 代碼來創建一個可用於進一步開發和測試的示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.