r中的匹配函数
有列表,第一个(列表1)有id、名称、年龄,其他(列表2、列表3,…)有id和测试值(唯一) 清单1:r中的匹配函数,r,match,vlookup,R,Match,Vlookup,有列表,第一个(列表1)有id、名称、年龄,其他(列表2、列表3,…)有id和测试值(唯一) 清单1: id age name bio-test 1 40 danny 2 16 nora 3 35 james 4 21 ben 清单2(生物测试): 我试图将测试值添加到列表1中的每个id(不是每个id都有测试值) 这是代码的一部分: for (i in 1:length(list1)) { list1$test1value &l
id age name bio-test
1 40 danny
2 16 nora
3 35 james
4 21 ben
清单2(生物测试):
我试图将测试值添加到列表1中的每个id(不是每个id都有测试值)
这是代码的一部分:
for (i in 1:length(list1)) {
list1$test1value <- list2$test[match(list1$id[i], list2$id[i]),
nomatch = NA_integer_, incomparables = NULL)] }
for(i in 1:length(list1)){
list1$test1value首先,您的示例中有输入错误。其次,“list1$test1value”的赋值应该添加一个“[i]”以避免在每一轮中保存。也不应该在list2$id
中添加“[i]”,因为您希望搜索整个向量以进行查找
for (i in 1:length(list1)) {
list1$test1value[i] <- list2$test[match(list1$id[i], list2$id,
nomatch = NA_integer_, incomparables = NULL)] }
更改了它。谢谢。这是昨天的一个示例。我的答案使用match
来填充缺少的值行。使用merge
可以更轻松地解决您的问题。类似于merge(df1,df2,by=“id”,all=TRUE)
.merge不适合我的目的,我不想创建不同的文件并合并这两个文件..我只想将每个列表2、列表3..中的一个值复制到具有相同id的列表1。复制将不受影响,merge
方法很容易应用。您可以重新分配到原始数据。frame:df1如果列表2有4000个id,列表1有5000个id,它将删除剩下的1000个。如果列表1存在,我需要向列表1添加一个测试值,如果不存在。据我所知,匹配与excel中的vlookup最为相似。你知道我的匹配代码有什么问题吗?
for (i in 1:length(list1)) {
list1$test1value[i] <- list2$test[match(list1$id[i], list2$id,
nomatch = NA_integer_, incomparables = NULL)] }
list1$test1value <- list2$test[match(list1$id, list2$id)]
merge(list1, list2[c("id", "test")], all.x=TRUE)
# id age name test
#1 1 40 danny 100
#2 2 16 nora NA
#3 3 35 james NA
#4 4 21 ben 55