很抱歉,很长的帖子。
尽管我设法使用 for 循环克服了这个问题,但我感觉 sqldf 会更有效,但到目前为止我还不能做到这一点。
我的第一个数据框有一个唯一标识符(名称)。它有点像 1000x5,但本着这样的精神:
Name <- c('Ben','Gary','John','Michael')
Age <- c(13,20,5,57)
dfA <- as.data.frame(cbind(Name,Age))
dfA
> Name Age
> 1 Ben 13
> 2 Gary 20
> 3 John 5
> 4 Michael 57
我的第二个数据框没有唯一键,也是 5000x5,但通常看起来像这样:
Name <- c('Ben','Ben','Ben','Gary','Michael','Michael','Michael')
Color <- c('Blue','Red','Green','Red','Yellow','Yellow','Black')
Other.Entries <- c('180','200','150','100','70','200','130')
dfB <- as.data.frame(cbind(Name,Color))
dfB
> Name Color Other_Entries(not.related)
>1 Ben Blue 180
>2 Ben Red 180
>3 Ben Green 150
>4 Gary Red 100
>5 Michael Yellow 70
>6 Michael Yellow 200
>7 Michael Black 130
请注意,每个名称的颜色都有冗余,并且并非所有名称都会出现。
我想要的输出是:
检索数据框 B 中每个名称的颜色(删除多余的,可能按字母顺序)
将这几种颜色转换为字符串(例如使用函数“toString”)
将字符串添加为第一个数据框中的新条目
起初,当我使用 for 循环时,我创建了一个带有这样的空列的新数据框
dfCombined <- dfA
dfCombined["Color"] <- NA
.. 并遍历所有行,从第二个数据帧进行查询。
但也许这可能没有必要使用一些聪明的东西。
最终结果应该是:
dfCombined
> Name Age Color
>1 Ben 13 Blue, Green, Red
>2 Gary 20 Red
>3 John 5
>4 Michael 57 Black, Yellow
有什么建议么?