R 避免循环中的运行时
Test是我的数据库,我想从中提取值,即emp id vector,我还有一个名为User的文件,我想从中提取值 测试数据库 名称Emp IDR 避免循环中的运行时,r,loops,apply,R,Loops,Apply,Test是我的数据库,我想从中提取值,即emp id vector,我还有一个名为User的文件,我想从中提取值 测试数据库 名称Emp ID A B C D A 用户文件 名称Emp ID A 1 B 2 C3 D 4 A 1 我的循环中有两个条件。我找到匹配的值,然后只选择它,如果有重复项,我只选择一个。我用了这个环。需要3个小时。我的用户文件中有dataframe和300000多行,我希望从中获取值 for (i in 1:nrow(Test)) {`enter code here` if
A
B
C
D
A 用户文件 名称Emp ID
A 1
B 2
C3
D 4
A 1 我的循环中有两个条件。我找到匹配的值,然后只选择它,如果有重复项,我只选择一个。我用了这个环。需要3个小时。我的用户文件中有dataframe和300000多行,我希望从中获取值
for (i in 1:nrow(Test))
{`enter code here`
if(Test[i,"Name"] %in% User_Name)
{
item_id_found<-Test[i,"Name"]Test[i,"Emp_ID"]<-as.numeric(User[which(User$Name==item_id_found),"Emp_ID"])[1]}}
for(i在1:nrow(测试))
{`在这里输入代码`
if(在%User\u Name中测试[i,“Name”]%
{
如果我正确理解您的问题,您可以简单地合并这两个数据集。但是,在合并之前,我们1)从test
中删除Emp\u id
变量,2)dedupuser
。这种方法假设Emp\u id
对于所有具有相同名称的行都是相同的
x <- merge(test[, 1], user[!duplicated(user$Name), ], by = "Name")
x
Name Emp_Id
1 A 1
2 B 2
3 C 3
4 D 4
我们使用subset
来去除test
中的Emp\u ID
变量,因为我们要合并它。我们使用!duplicated
来重复用户
,然后特别声明只保留名称
和Emp\u ID
。最后,我们将全部.x=TRUE
传递给合并
f函数以确保不会删除用户中未找到的测试中的任何值
为了解决最后一个问题,即如果test
和user
不共享相同的Name
变量,则进行合并,我们只需稍微调整merge
函数
names(user) <- c("Emp_Name", "Emp_ID")
x <- merge(subset(test, select = -c(Emp_ID)), user[!duplicated(user$Emp_Name), c("Emp_Name", "Emp_ID")], by.x = "Name", by.y = "Emp_Name", all.x = TRUE)
x
# Name Emp_ID
# 1 A 1
# 2 A 1
# 3 B 2
# 4 C 3
# 5 D 4
# 6 E NA
# 7 E NA
# 8 F NA
名称(用户)我不认为这是我一直在寻找的。假设测试有另一个元素E,而status没有该元素,那么它不会返回NA,而是在测试中返回D。同样,如果假设用户有一个Column,我不想与测试合并。我如何删除这个函数本身。status是什么?这是tes中的一个变量吗t
?这是您所调用的user
的实际名称吗?如果您只想从user
获取Emp\u ID
,那么只需在merge语句中声明即可。x让我们说,如果test有另一个元素E,而user没有该元素,那么它在test中不会返回NA,而是返回D。同样,如果让我们说用户有一个Column,我不想与test合并。我如何在这个函数中删除它。在上面的函数中,如果让我们假设用户和test对同一个向量有不同的标签。就像在user中,它是Name,在test中,它是Name,那么你发布的这个函数可以工作吗?或者我必须使用by.x=Name和by.y=NameI来合并它'将编辑我的答案以考虑新的条件。
names(user) <- c("Emp_Name", "Emp_ID")
x <- merge(subset(test, select = -c(Emp_ID)), user[!duplicated(user$Emp_Name), c("Emp_Name", "Emp_ID")], by.x = "Name", by.y = "Emp_Name", all.x = TRUE)
x
# Name Emp_ID
# 1 A 1
# 2 A 1
# 3 B 2
# 4 C 3
# 5 D 4
# 6 E NA
# 7 E NA
# 8 F NA