Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将一个数据帧中的值替换为另一个数据帧中的值_R_For Loop_Lapply - Fatal编程技术网

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