我想获取数据框的唯一行,然后将其与另一行属性进行连接。然后,我希望能够计算品种的数量,例如特定类型或来源的独特水果的数量。在R中合并数据帧的优雅方式?
的第一个数据帧有我水果的清单:
fruits <- read.table(header=TRUE, text="shop fruit
1 apple
2 orange
3 apple
4 pear
2 banana
1 banana
1 orange
3 banana")
第二个数据帧有我的属性:
fruit_class <- read.table(header=TRUE, text="fruit type origin
apple pome asia
banana berry asia
orange citrus asia
pear pome newguinea")
这里是我的笨拙的解决问题的办法:
fruit <- as.data.frame(unique(fruit[,2])) #get a list of unique fruits
colnames(fruit)[1] <- "fruit" #this won't rename the column and I don't know why...
fruit_summary <- join(fruits, fruit_class, by="fruit" #create a data frame that I can query
count(fruit_summary, "origin") #for eg, summarise the number of fruits of each origin
所以我的主要问题是:这怎么可以更优雅地表达(即一条线而不是3条)?其次:为什么它不允许我重命名列?
在此先感谢
在碱:'集合体(水果〜原点,合并(水果,fruit_class),FUN =长度)'或dplyr:'水果%>%left_join(fruit_class)%>%计数(原点)' – alistaire
你基本代码告诉我,亚洲有12种水果,新几内亚有4种水果,所以它总结了水果$商店专栏(我不想使用)。结果应该是来自亚洲的3个水果(苹果,香蕉和桔子)和一个来自新几内亚(梨)。 – setbackademic
我得到7和1,但如果你只是想从'fruit_class'数出来,使用'count(fruit_class,origin)'。如果你想确保它们在'fruits'中,那么使用'fruit_class%>%semi_join(fruits)%>%count(origin)',在这种情况下它会返回相同的结果。也不是总结“商店”;他们正在计数行。 – alistaire