簡體   English   中英

plm::pdata.frame 丟失由 labelled::var_label 創建的變量 label 屬性?

[英]plm::pdata.frame loses variable label attributes created by labelled::var_label?

我有一個面板數據,我已對其應用plm::pdata.frame以便能夠使用lag運算符。 但是,一旦我將 dataframe 轉換為 pdata.frame,我使用labelled::var_label創建的變量標簽不會顯示在modelsummary::msummary()中,而是顯示變量名稱。 我能做些什么來確保變量標簽而不是名稱出現在msummary()中嗎?

這些“標簽”實際上是在轉換過程中顯然會丟失的attributes 您可以嘗試將它們重新分配給您的 pdata.frame。 例子:

dat <- data.frame(matrix(1:12, 3, 4))  ## toy df
dat[] <- Map(`attr<-`, dat, 'foo', 1:4)  ## assign some labels named 'foo'

str(dat)  ## check structure
# 'data.frame': 3 obs. of  4 variables:
# $ X1: int  1 2 3
# ..- attr(*, "foo")= int 1
# $ X2: int  4 5 6
# ..- attr(*, "foo")= int 2
# $ X3: int  7 8 9
# ..- attr(*, "foo")= int 3


pdat <- plm::pdata.frame(dat)  ## convert to pdata.frame
str(pdat)  ## check for attributes
# Classes ‘pdata.frame’ and 'data.frame':   3 obs. of  3 variables:
# $ X1: Factor w/ 3 levels "1","2","3": 1 2 3
# ..- attr(*, "names")= chr [1:3] "1-4" "2-5" "3-6"
# ..- attr(*, "index")=Classes ‘pindex’ and 'data.frame':   3 obs. of  2 variables:
# .. ..$ X1: Factor w/ 3 levels "1","2","3": 1 2 3
# .. ..$ X2: Factor w/ 3 levels "4","5","6": 1 2 3
# $ X2: Factor w/ 3 levels "4","5","6": 1 2 3
# ..- attr(*, "names")= chr [1:3] "1-4" "2-5" "3-6"
# ..- attr(*, "index")=Classes ‘pindex’ and 'data.frame':   3 obs. of  2 variables:
# .. ..$ X1: Factor w/ 3 levels "1","2","3": 1 2 3
# .. ..$ X2: Factor w/ 3 levels "4","5","6": 1 2 3
# ...

現在我們可以看到,有新的屬性,但舊的已經丟失了。 但是,我們可以使用`attributes<-`()輕松地重新分配它們:

pdat[] <- Map(`attributes<-`, dat, lapply(dat, attributes))
str(pdat)
# Classes ‘pdata.frame’ and 'data.frame':   3 obs. of  3 variables:
#   $ X1: 'pseries' Named int  1 2 3
# ..- attr(*, "foo")= int 1
# ..- attr(*, "names")= chr [1:3] "1-4" "2-5" "3-6"
# ..- attr(*, "index")=Classes ‘pindex’ and 'data.frame':   3 obs. of  2 variables:
# .. ..$ X1: Factor w/ 3 levels "1","2","3": 1 2 3
# .. ..$ X2: Factor w/ 3 levels "4","5","6": 1 2 3
# $ X2: 'pseries' Named int  4 5 6
# ..- attr(*, "foo")= int 2
# ..- attr(*, "names")= chr [1:3] "1-4" "2-5" "3-6"
# ..- attr(*, "index")=Classes ‘pindex’ and 'data.frame':   3 obs. of  2 variables:
# .. ..$ X1: Factor w/ 3 levels "1","2","3": 1 2 3
# .. ..$ X2: Factor w/ 3 levels "4","5","6": 1 2 3
# ...

`attributes<-`()會將dat的所有屬性分配給pdat 對於僅 select 特定標簽,使用帶有 label 名稱的`attr<-`()

請注意,您的屬性可能稱為"labeled"而不是"foo" ,我不使用labelled 看看這是否有效,您的標簽是否顯示在摘要中。

暫無
暫無

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

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