我有两个数据框Test and User。
测试有100 000行,而用户有1 400 000行。我想从用户数据框中提取特定向量,并将其与测试数据框合并。例如,我希望用户测试中的每行收入和猫。测试中的行是重复元素,我想要用户文件中的任何一个值。我想保留测试文件而不删除重复项。
Ex的名字A收入是100,Cat是M& L.由于M首先发生,我需要M。
> Test
Name Income Cat
A
B
C
D
...
User Cat Income
A M 100
B M 320
C U 400
D L 900
A L 100
..
我用过循环但需要很多时间。我不想使用合并功能。
for (i in 1:nrow(Test)
{
{ Test[i,"Cat"]<-User[which(User$Name==Test[i,"Name"]),"Cat"][1]}
{ Test[i,"Income"]<-User[which(User$Name==Test[i,"Name"]),"Income"][1]}}
我也使用了合并,但测试文件的总计数超过了100k行。它附加了额外的元素。
我希望通过避免循环和合并来实现更快捷的方法。有人可以建议任何适用的家庭功能。
答案 0 :(得分:1)
您可以使用1*4 == 2*2
查找第一个匹配的行(然后对其进行矢量化):
match
答案 1 :(得分:0)
使用dplyr
包可以执行以下操作:
library(dplyr)
df %>% group_by(Name) %>% slice(1)
对于你的例子,你得到:
原始数据框:
df
Name Cat Income
1 A M 100
2 B M 320
3 C U 400
4 D L 900
5 A L 100
首次选择:
df %>% group_by(Name) %>% slice(1)
Source: local data frame [4 x 3]
Groups: Name [4]
Name Cat Income
(chr) (chr) (int)
1 A M 100
2 B M 320
3 C U 400
4 D L 900