【问题标题】:how to avoid assigning label to dataframe columns one by one for large number of columns in R如何避免为R中的大量列一一分配标签到数据框列
【发布时间】:2022-08-17 20:48:56
【问题描述】:

这是我要标记的数据框。标签将来自另一个数据框中的列。

  a b c
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4

  variable  label
1        a label1
2        b label2
3        c label3

这些是我尝试使用单独的标签(这是不可能的,因为我的实际数据中有很多列),以及循环和 paperR 包(我强烈希望避免这种情况,因为它只工作一次而不能再次工作-或者我没有正确应用它)

library(papeR)
library(Hmisc)
df <- data.frame(variable = c(\"a\", \"b\", \"c\"),
                 label = c(\"label1\", \"label2\", \"label3\"))
data <- data.frame(a = 1:4, b = 1:4, c = 1:4)

#### the classic column labeling
#### but my actual dataset has many calumns
Hmisc::label(data$a) <- df[1,2]
Hmisc::label(data$b) <- df[2,2]
Hmisc::label(data$c) <- df[3,2]
data


##### I want to somehow achieve this using Hmisc preferably
for(i in 1:ncol(data)){
       
   Hmisc::label(data[i]) <- df[i,2]
}
data


#### papeR is acting. s I do not want to use it. once it works
#### once it does not
papeR::labels(data) <- df$label  # this makes data a ldf
data <- as.data.frame(data)
data

    标签: r dataframe label hmisc


    【解决方案1】:

    我认为您已经接近您想要的解决方案,您只需在 for 循环中将 data[i] 更改为 data[[i]]

    library(Hmisc)
    #> Loading required package: lattice
    #> Loading required package: survival
    #> Loading required package: Formula
    #> Loading required package: ggplot2
    #> 
    #> Attaching package: 'Hmisc'
    #> The following objects are masked from 'package:base':
    #> 
    #>     format.pval, units
    df <- data.frame(variable = c("a", "b", "c"),
                     label = c("label1", "label2", "label3"))
    data <- data.frame(a = 1:4, b = 1:4, c = 1:4)
    
    # You only had to change data[i] for data[[i]]
    for (i in 1:ncol(data)) {
      Hmisc::label(data[[i]]) <- df[i, 2]
    }
    
    str(data)
    #> 'data.frame':    4 obs. of  3 variables:
    #>  $ a: 'labelled' int  1 2 3 4
    #>   ..- attr(*, "label")= chr "label1"
    #>  $ b: 'labelled' int  1 2 3 4
    #>   ..- attr(*, "label")= chr "label2"
    #>  $ c: 'labelled' int  1 2 3 4
    #>   ..- attr(*, "label")= chr "label3"
    

    【讨论】:

      【解决方案2】:

      不需要任何循环。只需设置label(data, self = FALSE) &lt;- value

      label(data, self = FALSE) <- c("label1", "label2", "label3")
      
      查看
      label(data)
      #        a        b        c 
      # "label1" "label2" "label3"
      
      str(data)
      # 'data.frame': 4 obs. of  3 variables:
      #  $ a: 'labelled' int  1 2 3 4
      #   ..- attr(*, "label")= chr "label1"
      #  $ b: 'labelled' int  1 2 3 4
      #   ..- attr(*, "label")= chr "label2"
      #  $ c: 'labelled' int  1 2 3 4
      #   ..- attr(*, "label")= chr "label3"
      

      【讨论】:

        猜你喜欢
        • 2015-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-03
        • 1970-01-01
        • 2018-09-27
        • 1970-01-01
        相关资源
        最近更新 更多