R 基于字符串匹配将一列中的值替换为另一列中的值

R 基于字符串匹配将一列中的值替换为另一列中的值,r,R,假设我有一个大约有7列的数据框。第一列包含一个数字列表,其他列有一个数字,后面跟单词 假设数字是15。我想让R看看其他6列,找出哪一列有“15”,并将该条目的内容复制到我的数字列中 我该怎么做 编辑:假设在R搜索时不会有多个匹配项。如果我正确理解您的要求,您可以在每行独立使用value=T的grep(),并用结果向量覆盖数字列 ## generate data set.seed(1L); NR <- 5L; NC <- 7L; nums <- sample(seq_len(NR

假设我有一个大约有7列的数据框。第一列包含一个数字列表,其他列有一个数字,后面跟单词

假设数字是15。我想让R看看其他6列,找出哪一列有“15”,并将该条目的内容复制到我的数字列中

我该怎么做


编辑:假设在R搜索时不会有多个匹配项。

如果我正确理解您的要求,您可以在每行独立使用
value=T
grep(),并用结果向量覆盖数字列

## generate data
set.seed(1L); NR <- 5L; NC <- 7L;
nums <- sample(seq_len(NR));
df <- data.frame(num=nums,t(sapply(nums,function(num) paste0(sample(if (NC-1L>=num) seq_len(NC-1L) else c(num,seq_len(NC-2L))),sample(letters,NC-1L,T)))));
df;
##   num X1 X2 X3 X4 X5 X6
## 1   2 6e 5r 3j 2u 1m 4s
## 2   5 6d 2g 4k 3a 1j 5w
## 3   4 3r 6u 5c 2s 1k 4v
## 4   3 4m 6t 3s 2m 5w 1l
## 5   1 2k 1x 5h 4l 6i 3q

## solution
df$num <- sapply(seq_len(nrow(df)),function(ri) grep(value=T,paste0('^',df$num[ri],'($|[^0-9])'),unlist(df[ri,-1L])));
##   num X1 X2 X3 X4 X5 X6
## 1  2u 6e 5r 3j 2u 1m 4s
## 2  5w 6d 2g 4k 3a 1j 5w
## 3  4v 3r 6u 5c 2s 1k 4v
## 4  3s 4m 6t 3s 2m 5w 1l
## 5  1x 2k 1x 5h 4l 6i 3q
##生成数据

结实种子(1L);NR如果我正确理解您的需求,您可以在每一行上单独使用
grep()
value=T
,传递必须根据第一列中的数字动态构造的正则表达式,并用结果向量覆盖数字列

## generate data
set.seed(1L); NR <- 5L; NC <- 7L;
nums <- sample(seq_len(NR));
df <- data.frame(num=nums,t(sapply(nums,function(num) paste0(sample(if (NC-1L>=num) seq_len(NC-1L) else c(num,seq_len(NC-2L))),sample(letters,NC-1L,T)))));
df;
##   num X1 X2 X3 X4 X5 X6
## 1   2 6e 5r 3j 2u 1m 4s
## 2   5 6d 2g 4k 3a 1j 5w
## 3   4 3r 6u 5c 2s 1k 4v
## 4   3 4m 6t 3s 2m 5w 1l
## 5   1 2k 1x 5h 4l 6i 3q

## solution
df$num <- sapply(seq_len(nrow(df)),function(ri) grep(value=T,paste0('^',df$num[ri],'($|[^0-9])'),unlist(df[ri,-1L])));
##   num X1 X2 X3 X4 X5 X6
## 1  2u 6e 5r 3j 2u 1m 4s
## 2  5w 6d 2g 4k 3a 1j 5w
## 3  4v 3r 6u 5c 2s 1k 4v
## 4  3s 4m 6t 3s 2m 5w 1l
## 5  1x 2k 1x 5h 4l 6i 3q
##生成数据

结实种子(1L);NR如果一个以上的列与一个数字匹配,会发生什么?我忘了提到这一点,但假设不可能发生多个匹配。创建一个小示例,我们可以处理如果一个以上的列与一个数字匹配,会发生什么情况?我忘了提到这一点,但是假设不可能发生多个匹配。创建一个小示例,我们可以使用它