假设我的数据框大约有7列。第一列包含数字列表,其他列有一个数字后跟单词。
假设数字为15.我希望R查看其他6列,找到哪一列有“15”并将该条目的内容复制到我的号码列中。
我该怎么做?
编辑:假设在R搜索时不会有多个匹配。
答案 0 :(得分:2)
如果我正确理解您的要求,您可以在每行上独立使用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
这假设每个数字恰好匹配一个列值。