首页 > 解决方案 > 将值从一个数据帧分配到另一个数据帧

问题描述

我有以下数据框

OCC1990     Skilllevel
 3             1
 8             2
 12            2
 14            3
 15            1 

如上图所示,它包含一长串分配给特定技能水平的职业。我的实际数据框是一个包含数百万行的家庭调查,其中包括一列也名为OCC1990. 我的目标是将上述数据框架中我指定的技能水平应用到家庭调查中。

我过去已经为较小的数据帧应用了以下代码,这是一种非常手动的方式

cps_data[cps_data$OCC1990  %in% 3,"skilllevel"] <- 1
cps_data[cps_data$OCC1990  %in% 4:7,"skilllevel"] <- 1
cps_data[cps_data$OCC1990  %in% 8,"skilllevel"] <- 2

但由于我不想花几个小时复制粘贴以及增加出错的可能性,我正在寻找一种不同的、更直接的方法。

我已经尝试合并两个数据帧,但这会导致与向量大小相关的错误。

除了合并两个数据框以将技能水平也分配给调查中的职业之外,还有其他方法吗?

非常感谢提前Xx弗雷迪

标签: r

解决方案


用于data.table大型数据集

创建两个向量:levelslabels。包含您要应用的新技能级别的levels唯一值OCC1990和。labels

现在使用levelslabels里面的factor功能来修改技能等级。(我用Skilllevel= 3 表示OCC1990= 8 )

library(data.table)
setDT(df)
levels <- c(3:7,8)        # unique values of OCC1990
labels <- c(rep(1,5), 3)  # new Skill levels corresponding to OCC1990
setkey(df, OCC1990)       # sort OCC1990 for speed before filtering
df[ OCC1990 %in% levels, Skilllevel := as.integer(as.character(factor(OCC1990, levels = levels, labels = labels)))]
head(df)
#   OCC1990 Skilllevel
#1:       3          1
#2:       8          3
#3:      12          2
#4:      14          3
#5:      15          1

如果您仍然面临内存大小问题,请从 IO 中读取数据块(使用fread)并应用上述操作,然后将数据附加到新文件中。

数据:

df <- read.table(text='OCC1990     Skilllevel
 3             1
 8             2
 12            2
 14            3
 15            1 ', header=TRUE)

推荐阅读