R 如何仅使用来自其他两个数据帧的某些观测值来创建新的数据帧?
我有下面的数据框(dat),其中每一行都由一个人的名字唯一标识R 如何仅使用来自其他两个数据帧的某些观测值来创建新的数据帧?,r,dataframe,R,Dataframe,我有下面的数据框(dat),其中每一行都由一个人的名字唯一标识 Name Distance Driven Distance From Home John Smith 123 km 115 km Michael Jones 15 km 8 km Eric Stevens 777 miles
Name Distance Driven Distance From Home
John Smith 123 km 115 km
Michael Jones 15 km 8 km
Eric Stevens 777 miles 725 miles
Brian McGee 1029 km 1029 km
Dave Baker 8 miles 8 miles
我有第二个数据帧(dat2),也是通过名称唯一标识的,它只包括初始数据集中的一部分名称以及一些新名称。但是,每行中的数据(名称和列名除外)不存在
Name Distance Driven Distance From Home
John Smith
Derek Thompson
Eric Stevens
Dave Baker
我希望创建一个新的数据框架,其中包括:
Name Distance Driven Distance From Home
John Smith 120 km 115 km
Derek Thompson
Eric Stevens 777 miles 725 miles
Dave Baker
我希望这是有道理的。提前感谢。您想从
dplyr
软件包中执行左join()
library(dplyr)
dat2 %>%
select(Name) %>%
left_join(dat1)
您的输出将如下所示:
Name `Distance Driven` `Distance From Home`
John Smith 120 km 115 km
Derek Thompson NA NA
Eric Stevens 777 miles 725 miles
Dave Baker NA NA
除去
dat2
中的空列,然后使用联接。我已经为有关如何在R中进行联接的常见问题解答和有关不同联接类型的更一般常见问题解答标记了重复项(该概念在各种语言中很常见)。我将重新问这个问题,因为我没有包括为我的数据获得有用答案所需的所有数据。我尝试了很多左连接的变体,但它并不能解决我所有的问题。我期待着新的版本。如果您与dput()
共享示例数据,则会更容易提供帮助,因此它是可复制/粘贴的。此问题中共享的数据在列名和值中有空格,这使得导入很困难,dat2
中的空格不明确(它们是缺少值NA
还是空字符串”
或其他?)。使用dput()
将允许我们直接导入您共享的数据,包括所有类和结构信息,并演示其解决方案。使用dput(dat1)
复制/粘贴版本的dat1
,或者在子集上使用dput(dat1[1:10,])
复制前10行。我刚刚尝试过这个,它在大多数情况下都有效,只是它消除了dat2中的其他有用信息。当我输入问题时,我忽略了一个事实,即在“Name”之后还有一列叫做“State”。当我运行上面的代码时,它消除了当此人在第二个数据集中而不是第一个数据集中时“state”列的所有数据。因此,新数据集中的state列对这些观察结果只表示“NA”。有什么办法可以改善这种情况吗?@rogues77-只需从dat2
中列出您想保留在select()
中的列。实际上我已经尝试过了——当我这样做时,它会消除第一个和第二个数据集中名称的“距离驱动”和“离家距离”信息中的数据。因此,生成的数据集不包括“距离驱动”列和“距离到家”列的任何值。有没有办法把它们包括在内?