r - 将值从一个数据帧分配到另一个数据帧
问题描述
我有以下数据框
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弗雷迪
解决方案
用于data.table
大型数据集
创建两个向量:levels
和labels
。包含您要应用的新技能级别的levels
唯一值OCC1990
和。labels
现在使用levels
和labels
里面的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)
推荐阅读
- php - 将所需文件分配给 PHP 中的全局命名空间
- python - Opencv:AttributeError:模块'cv2'没有属性'dnn'
- mysql - 如何使用聚合函数在 MySQL 查询中获取空结果集?
- batch-file - 如何在 Windows 批处理文件中获取管道输入?
- python - 如何将空字符串转换为“无”(python 3 使用 thonny)
- apache2 - ubuntu php pdo_sqlsev install fall 但 sqlsrv 成功
- php - Laravel Chumper / Zipper 权限在提取时被拒绝
- itext - itextsharp 在多页中分割一行(在绝对位置)
- python - 删除字符串python中的空格和破折号
- php - 我正在尝试使用 PHP 和 mysql 制作点击计数器