问题描述
编辑(为了更精确):我有一个 csv 文件,其中存储了数据帧 A 中每个变量的标签和值信息。
在原始数据帧 A 中有 250 个变量。出于演示目的,我有:
- 将数据框 A 从 250 个变量减少到 7 个变量。
- 将信息作为数据帧 B 加载到 csv 文件中,并减少到 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","24.08.2016","26.08.2016","27.08.2016","27.08.2016"),c = c("A","A","B","C","C"),d = c(4795L,7242L,2246L,7914L,9910L,4279L,9174L,8329L,8310L,4799L),e = c(6L,11L,2L,12L,f = c(1973L,1933L,1977L,1969L,1960L,1950L,1963L,1967L,1951L,1970L),g = c(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","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@",@female@,@male@")),-7L),class = "data.frame")
期望输出:
解决方法
您可以尝试以下方法。但是,如果您事先将 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")