我希望这不是一个重复的问题;我似乎无法弄明白。我有多个表,我试图通过基本上做一个VLookup连接在一起。这就是我在Excel中如何做到这一点。
我有两个以这种方式组合的SQL数据集。
Combined <- rbind(FGD, FNK)
在这个组合数据集中,我正在尝试对名为&#39;类别&#39;的字段进行VLookup。在另一个数据集中,命名为&#39;类别&#39;我还有一个名为&#39; Category&#39;的字段。这来自Excel文件。
我试过了:
merge(Combined.Category, Category.Category, all=TRUE)
我刚收到这个错误。
Error in merge(Combined.Category, Category.Category, all = TRUE) :
object 'Combined.Category' not found
不是这样的吗? merge(Table1.Field1, Table2.Field2, all=TRUE)
另外,为了使这个更复杂一点,我想做一个VLookup到Category.Category,如果找不到匹配,再做一个VLookup到Category.DES。
我该怎么做?我很确定有办法做到这一点,但我真的不知道如何处理这类事情。
感谢所有人!
答案 0 :(得分:3)
你在这里遇到了一些问题。
1)您使用$
访问data.frame的列,而不是.
您似乎有两个data.frames - Combined和Category。要访问每个中的“类别”列,请使用Combined$Category
和Category$Category
。
2)merge()
期望data.frames,而不是列。正如PoGibas指出的那样,你想做
merge(Combined, Category, by="?")
其中?
是两个数据集中常见的列的名称。根据您的描述,它听起来不像是#34;类别&#34;但是我没有足够的信息来说明这一点。我们假设您在Combined
和Category
都有一个ID列。然后你会做
merge(Combined, Category, by="ID")
3)假设您确实有一些id列或列来链接这两个数据集,那么合并后的结果将包含来自两个数据集的所有列。出现在两个数据集中的列都会添加一个后缀。来自第一个数据集的那些将具有&#34; original_name.x&#34;而第二个中的那些将具有&#34; original_name.y&#34;
然后,您可以创建一个新列,如果它存在,则获取Category$Category
的值,如果不存在,则创建Category$DES
的值:
mergeddata <- merge(Combined, Category, by="ID")
mergeddata$desired_value <- ifelse(is.na(mergeddata$Category.y),
mergeddata$Category.y, mergeddata$DES)
如果您的数据中实际上没有NA
,那么您可能需要更改ifelse()
中的条件以检查空字符串或其他一些值,表明没有&# 39; ta有效类别。