我有一个由
组成的数据框Lancaster001A 76
Lancaster001B 35
Lancaster002A 46
Lancaster002D 9
.... ...
我想将数据框合并到此
中Lancaster001 111
Lancaster002 55
然后删除较小的分类。我找不到与合并有关的方法,是否有可以使用相似性的一般函数?
答案 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