【问题标题】:How to retrieve label and value information for data in dataframe A from dataframe B如何从数据框 B 中检索数据框 A 中数据的标签和值信息
【发布时间】:2021-01-23 20:45:57
【问题描述】:

已编辑(为了更准确):我有一个 csv 文件,其中存储了数据框 A 中每个变量的标签和值信息。
在原始数据框 A 中有 250 个变量。出于演示目的,我有:

  1. 将数据帧 A 从 250 个变量减少到 7 个变量。
  2. 将包含信息的 csv 文件加载为数据框 B,并且还减少到 7 个变量。

我的具体问题: 如何将每个代码的数据帧 B 中的信息(例如标签和值)分配给数据帧 A 中的变量。 到目前为止,我可以通过逐个变量来实现我的目标。

我希望现在的问题更具体。我不知道我的思维方式是否完全错误。 将不胜感激。

我的数据框 A:

structure(list(a = c(2L, 7L, 8L, 5L, 10L, 1L, 6L, 9L, 3L, 4L), 
               b = c("29.06.2016", "18.07.2016", "26.07.2016", "04.08.2016", "12.08.2016", "12.08.2016", "24.08.2016", "26.08.2016", "27.08.2016", "27.08.2016"), 
               c = c("A", "A", "B", "A", "C", "C", "B", "C","B", "C"), 
               d = c(4795L, 7242L, 2246L, 7914L, 9910L, 4279L,9174L, 8329L, 8310L, 4799L), 
               e = c(6L, 10L, 8L, 10L, 11L, 7L, 11L, 2L, 12L, 4L), 
f = c(1973L, 1933L, 1977L, 1969L, 1960L, 1950L, 1963L, 1967L, 1951L, 1970L), 
               g = c(2L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L)), row.names = c(NA, -10L), class = "data.frame")

我的数据框 B(标签和值的信息):

structure(list(
  variable = c("a", "b", "c", "d", "e", "f", "g"), 
  class = c("number", "string", "string", "string", "number", "number", "number"), 
  label = c("AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG"), 
  values = c("", 
             "", 
             "", 
             "", 
             "@0@,@k.A.@,@1@,@Januar@,@2@,@Februar@,@3@,@März@,@4@,@April@,@5@,@Mai@,@6@,@Juni@,@7@,@Juli@,@8@,@August@,@9@,@September@,@10@,@Oktober@,@11@,@November@,@12@,@Dezember@", 
             "", 
             "@0@,@k.A.@,@1@,@female@,@2@,@male@")), 
  row.names = c(NA, -7L), class = "data.frame")


想要的输出:

【问题讨论】:

    标签: r dataframe label recode


    【解决方案1】:

    您可以尝试以下方法。但是,如果您事先阅读 e 和 g 作为因素,会更容易。然后,您无需使用as.factor 转换它们。

    library(lubridate)
    
    dfB$label
    dfC <- setNames(dfA, dfB$label)
    
    # use a random date to generate level
    a <- month(ymd(210101) + months(0:11), label = TRUE)
    
    dfC$EEEE <- as.factor(dfC$EEEE) 
    levels(dfC$EEEE) <- a
    
    
    dfC$GGGG <- as.factor(dfC$GGGG)
    levels(dfC$GGGG) <- c("female", "male")
    
    

    【讨论】:

    • 谢谢。该解决方案有效,我知道这样的解决方案。尽管如此,我还是感谢你的努力。原始数据有超过 250 个变量,我尝试为每个变量自动完成。一种查找表等......我投票赞成。这是一个可行的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 2017-04-15
    • 1970-01-01
    • 2023-02-08
    • 2023-01-07
    • 1970-01-01
    • 2021-10-29
    相关资源
    最近更新 更多