R 将一个数据帧中的值替换为另一个数据帧中的值
我需要将当前按字母顺序排列的单个标识符更改为数字。我创建了一个数据帧,其中每个字母标识符都与一个数字相关联R 将一个数据帧中的值替换为另一个数据帧中的值,r,for-loop,lapply,R,For Loop,Lapply,我需要将当前按字母顺序排列的单个标识符更改为数字。我创建了一个数据帧,其中每个字母标识符都与一个数字相关联 individuals num.individuals (g4) 1 ZYO 64 2 KAO 24 3 MKU 32 4 SAG 42 我需要在我的主数据帧(g3)中用数字64替换ZYO,并且像wise一
individuals num.individuals (g4)
1 ZYO 64
2 KAO 24
3 MKU 32
4 SAG 42
我需要在我的主数据帧(g3)中用数字64替换ZYO,并且像wise一样替换所有其他代码
我的主数据帧(g3)如下所示
SAG YOG GOG BES ATR ALI COC CEL DUN EVA END GAR HAR HUX ISH INO JUL
1 2
2 2 EVA
3 SAG 2 EVA
4 2
5 SAG 2
6 2
现在,在小范围内,我可以编写一个代码来更改它,就像我对ATR所做的那样
g3$ATR <- as.character(g3$ATR)
g3[g3$target == "ATR" | g3$ATR == "ATR","ATR"] <- 2
g3$ATR以下是一种使用数据的方法。表
包:
首先,创建一个与您的数据类似的可复制示例:
require(data.table)
ref <- data.table(individuals=1:4,num.individuals=c("ZYO","KAO","MKU","SAG"),g4=c(64,24,32,42))
g3 <- data.table(SAG=c("","SAG","","SAG"),KAO=c("KAO","KAO","",""))
这是您的g3
表格:
individuals num.individuals g4
1: 1 ZYO 64
2: 2 KAO 24
3: 3 MKU 32
4: 4 SAG 42
SAG KAO
1: KAO
2: SAG KAO
3:
4: SAG
现在我们查找并替换:
g3[ , lapply(.SD,function(x) ref$g4[chmatch(x,ref$num.individuals)])]
最后的结果是:
SAG KAO
1: NA 24
2: 42 24
3: NA NA
4: 42 NA
如果您需要更高的速度,fastmatch
软件包可能有助于其fmatch
功能:
require(fastmatch)
g3[ , lapply(.SD,function(x) ref$g4[fmatch(x,ref$num.individuals)])]
SAG KAO
1: NA 24
2: 42 24
3: NA NA
4: 42 NA
SAG KAO
1: NA 24
2: 42 24
3: NA NA
4: 42 NA
require(fastmatch)
g3[ , lapply(.SD,function(x) ref$g4[fmatch(x,ref$num.individuals)])]
SAG KAO
1: NA 24
2: 42 24
3: NA NA
4: 42 NA