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