删除并聚合重复项

标签 r duplicates subset lapply

我已经发布了我正在使用的数据示例 here .

“Parcel..”是主要索引变量,并且有大量重复项。所有其他列中的重复项不一致。我的目标是聚合数据集,以便每个地 block 只有一个观察结果。 我使用以下代码来尝试对数值向量求和:

聚合(Ap.sample$X.11~Ap.sample$Parcel..,FUN=sum)

问题是它删除了除了包裹和我引用的其他向量之外的所有内容。

我的目标是对parcelID的观测值的某些数值向量(总和)(X.11,X.13,X.15,num_units)使用相同的规则,对其他数值向量使用不同的规则(平均值)( Acres,Ttl_sq_ft,Mtr.Size),并且对于字符变量仍然有不同的规则(只需选择一个名称)(假设还有另一列“customer.name”,其相同唯一地 block ID 的不同值,即“Steven 公寓”和“斯蒂芬公寓”),并删除所有其他变量的额外观察结果。

我尝试使用 numcolwise 函数,但这也不能满足我的需要。 我的直觉是指定我想要求和的列以及我想要取平均值的列,如下所示:

DT<-as.data.table(Ap.sample)
sum_cols<-Ap.05[,c(10,12,14)]
mean_cols<-Ap.05[,c(17:19)]

然后使用lapply函数遍历每个观察结果并执行我需要的操作。

df05<-DT[,lapply(.SD,sum), by=DT$Parcel..,.SDcols=sum_cols]
df05<-DT[,lapply(.SD,mean),by=DT$Parcel..,.SDcols=mean_cols]

但是第一次就会出现错误。我知道有一个比强行解决这个问题更简单的解决办法。

最佳答案

你可以这样做:

library(dplyr)
df %>% 
  # create an hypothetical "customer.name" column 
  mutate(customer.name = sample(LETTERS[1:10], size = n(), replace = TRUE)) %>%
  # group data by "Parcel.."
  group_by(Parcel..) %>% 
  # apply sum() to the selected columns
  mutate_each(funs(sum(.)), one_of("X.11", "X.13", "X.15", "num_units")) %>%
  # likewise for mean()
  mutate_each(funs(mean(.)), one_of("Acres", "Ttl_sq_ft", "Mtr.Size")) %>%
  # select only the desired columns 
  select(X.11, X.13, X.15, num_units, Acres, Ttl_sq_ft, Mtr.Size, customer.name) %>%
  # de-duplicate while keeping an arbitrary value (the first one in row order)
  distinct(Parcel..)

关于删除并聚合重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30249186/

相关文章:

c# - 获取在列表中出现两次的对象列表

根据另一列删除一列中的重复项

Pandas :按不需要的列名子集数据框

algorithm - 正整数和负整数的子集和

r - 选择一个不相关的子集,受约束

r - 需要将包含大于或等于 3 次重复字母的名称替换为模式 "AAA"且不包含任何内容

r - 在 R 中,如何测试两个函数是否具有相同的定义?

duplicates - drop_duplicates() 获得意外的关键字参数 'ignore_index'

r - 无法在最新版本的 RStudio 和 R Version.3.1.1 中安装软件包

r - 在这种情况下如何制作混淆矩阵?