我想获取数据框的唯一行,然后将其与另一行属性连接。我希望能够计算出品种的数量,例如:特定类型或来源的独特水果数量。
第一个数据框有我的水果列表:
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行)? 其次:为什么它不允许我重命名专栏?
提前致谢
答案 0 :(得分:0)
简单地做
colSums()
给你
fruits
您可以使用fruit_class
添加区号。我想不出需要colnames(fruit)[1] <- "fruit"
数据框的原因,因为如果这里有一个水果不在colnames(fruit) <- "fruit"
中,那么无论如何都没有原始数据。
顺便说一句,在您的代码示例中,{{1}}应该有效,但只需要{{1}},因为无论如何,这些名称的长度只有1个元素。
答案 1 :(得分:0)
这是一个data.table
解决方案。
library(data.table)
setDT(fruit_class)[, uniqueN(fruit), by=type]
# type V1
# 1: pome 2
# 2: berry 1
# 3: citrus 1
setDT(fruit_class)[, uniqueN(fruit), by=origin]
# origin V1
# 1: asia 3
# 2: newguinea 1