r - 匹配变量名
问题描述
我有一个目前看起来像这样的数据集:
Actor1 Actor2
1 2
1 4
2 5
1 3
2 6
4 5
2 7
3 7
我拥有的另一个数据集确定了每个数字的含义。像这样的东西:
ID Label
1 Walmart
2 Apple
3 Microsoft
4 Vodafone
5 BMW
6 Berkshire Hathaway
7 Bank of America
我需要使用第二个数据集来识别第一个数据集中的演员是谁,我希望我的最终数据集看起来像:
Actor1 Actor2
Walmart Apple
Walmart Vodafone
Apple BMW
.
.
.
等等。我最初使用 ifelse 函数并手动完成,但耗时太长。然后我通过创建三个数据文件(文件 1:Actor 1;文件 2:Actor 2;文件 3:ID 和名称)尝试了合并功能。但是 Actor1 和 Actor2 列之间的顺序混乱了。
感觉这应该很简单,但我很困惑。有什么好主意吗?
先感谢您。
解决方案
基本 R 方法
d <- with(df2, setNames(ID, Label))
list2DF(Map(function(x, y) names(d)[match(x, y)], df1, list(d)))
给
Actor1 Actor2
1 Walmart Apple
2 Walmart Vodafone
3 Apple BMW
4 Walmart Microsoft
5 Apple Berkshire Hathaway
6 Vodafone BMW
7 Apple Bank of America
8 Microsoft Bank of America
一个更短的(感谢@akrun 的评论)
df1[] <- df2$Label[as.matrix(df1)]
数据
> dput(df1)
structure(list(Actor1 = c("Walmart", "Walmart", "Apple", "Walmart",
"Apple", "Vodafone", "Apple", "Microsoft"), Actor2 = c("Apple",
"Vodafone", "BMW", "Microsoft", "Berkshire Hathaway", "BMW",
"Bank of America", "Bank of America")), row.names = c(NA, -8L
), class = "data.frame")
> dput(df2)
structure(list(ID = 1:7, Label = c("Walmart", "Apple", "Microsoft",
"Vodafone", "BMW", "Berkshire Hathaway", "Bank of America")), class = "data.frame", row.names =
c(NA,
-7L))
推荐阅读
- angular - Angular - Ng-Bootstrap 模态编辑未加载任何数据
- selenium-webdriver - 如何让量角器在不重新加载浏览器的情况下重新加载 DOM
- python - Python 在没有 Pandas 的情况下每隔 n 行输出一次
- .net - 带有 dotnet sdk2 和 sdk 3.1 的 Docker 映像
- javascript - 数据表上未显示的按钮
- c# - 转换图像的背景是灰色的,我需要它是透明的(ASP.Net)
- javascript - 如何更正这个错误的 Jquery 代码?
- node.js - 如何在数据库中使用 i18n
- python - 如何从 Python 的响应中只取 1 个值?
- python - 运行简单的 Python 计算器时出现逻辑错误