如何在R中的数据框中组合相似的元素

时间:2016-05-24 15:08:15

标签: r dataframe

我有一个由

组成的数据框
Lancaster001A    76
Lancaster001B    35
Lancaster002A    46
Lancaster002D     9
....             ...

我想将数据框合并到此

Lancaster001    111
Lancaster002     55

然后删除较小的分类。我找不到与合并有关的方法,是否有可以使用相似性的一般函数?

3 个答案:

答案 0 :(得分:3)

以下是使用a regex删除三个数字字符后的所有字符的基本R解决方案:

DF <- read.table(text = "Lancaster001A    76
                 Lancaster001B    35
                 Lancaster002A    46
                 Lancaster002D     9")

setNames(aggregate(V2 ~ gsub("(?<=\\d{3}).*", "", V1, perl = TRUE), 
                   DF, FUN = sum), 
         c("V1", "V2"))
#            V1  V2
#1 Lancaster001 111
#2 Lancaster002  55

如果聚合在大型数据集上太慢,那么使用data.table是微不足道的。

如果数据结构不同,请根据需要调整正则表达式。

答案 1 :(得分:2)

让我们为您的列假设这些名称,让我们假设“较小的分类”意味着最后一个字母。

id               value
Lancaster001A    76
Lancaster001B    35
Lancaster002A    46
Lancaster002D     9
....             ...

我将dplyr用于一切。 Install dplyr,确保您的列名正确无误,然后尝试:

library(dplyr)
mydata %>%
  mutate(id = substr(id, 1, nchar(id)-1) %>% # removes last character
  group_by(id) %>%
  summarize(sum = sum(value))

答案 2 :(得分:2)

编辑:来自@ Arun的有用提示更简单的data.table解决方案:

library(data.table)
dt[, list(sum=sum(value)), by = substr(as.character(id),1,nchar(as.character(id)) - 1)]

             id sum
1: Lancaster001 111
2: Lancaster002  55