【发布时间】:2017-10-24 02:11:58
【问题描述】:
我在 R 中有一个数据框,我想对共享名称的行中的值求和,并记录每一行的假名称。谁能想到一种有效的方法来做到这一点?我写了一个 for 循环(复制如下),但在大型数据集上效率极低。
提前致谢!
此数据集中给出了一些信息:(1) 不超过 2 个站点共享一个名称,(2) 这两个站点将始终在连续行中紧随其后。尽管我对其他框架不太熟悉,但我也对非 R 解决方案持开放态度。
初始数据示例:
name, fake_name, value1, value2, value3
siteX, siteX, 4, 2, 0.5
siteX, siteX2, 1, 4, 0.2
siteY, siteY, 2, 1, 0.4
siteZ, siteZ, 8, 3, 0.2
转换为:
name, value1, value2, value3, fake_name, dup_fake_name
siteX, 5, 6, 0.7, siteX, siteX2
siteY, 2, 1, 0.4, siteY, NA
siteZ, 8, 3, 0.2, siteZ, NA
for循环版本:
data[,c(1,3:5,2)] -> d2; d2$dup_fake_name <- NA
for (i in 1:(nrow(data)-1) {
if (data$name[i] == data$name[i+1]) {
data$value[i] <- data$value[i] + data$value[i+1]
data$dup_fake_name[i] <- data$fake_name[i+1]
}}
【问题讨论】:
标签: r for-loop duplicates