r - 如果实例重复则变异
问题描述
我得到了一张(学校)表格,它是由关于学生、学校类型等的数据加上 x 和 y 坐标制成的。我想创建一个显示所有学校的地图。但是有些学校在同一个地址有两个或多个不同的学校类型。所以 x- 和 y- 是相同的,我不能在地图上同时显示,因为标记位于确切的位置。现在我想稍微改变多组坐标之一的 x 坐标 (X_CO)。
我的任务是找到一种方法来选择一对重复项的一个实例并改变行“X_CO”:
如果第一个(或最后一个)重复==TRUE 那么mutate(dat$X_CO=dat$X_CO+0.00015)
. 否则没有变化。这适用于表的每个实例。并重复两个以上具有相同坐标的实例的情况。
我试过duplicated(dat$X_CO)
了,但这让我对 Name_B 和 Name_D 都是正确的。任何建议都会被赞赏:)
Data_have <- data.frame(
Name = c("Name_A","Name_B","Name_C","Name_D"),
X_CO = c(8.456,8.456,9.876,8.456)
)
Data_want <- data.frame(
Name = c("Name_A","Name_B","Name_C","Name_D"),
X_CO = c(8.456,8.457,9.876,8.458)
)
解决方案
如果你想改变最后一个副本,即c(1, 2, 3, 3, 3)
成为c(1, 2, 3, 3.00015, 3.00030)
,那么(并稍微改变你的例子),
Name X_CO
1 Name_A 8.456
2 Name_B 8.456
3 Name_C 8.456
4 Name_D 8.456
5 Name_E 8.456
6 Name_F 9.876
i1 <- duplicated(have$X_CO)
vec_to_add <- 0.00015 * seq(sum(i1))
have$X_CO[i1] <- have$X_CO[i1] + vec_to_add
这使,
Name X_CO 1 Name_A 8.45600 2 Name_B 8.45615 3 Name_C 8.45630 4 Name_D 8.45645 5 Name_E 8.45660 6 Name_F 9.87600
根据您的评论,我们可以使用ave
对所有连续重复项进行分组,即
have$new.X_CO <- have$X_CO + ave(have$X_CO, have$X_CO, FUN = function(i)0.00015 * (seq(length(i))-1))
这使,
Name X_CO new.X_CO 1 Name_A 8.456 8.45600 2 Name_B 8.456 8.45615 3 Name_C 8.456 8.45630 4 Name_D 8.456 8.45645 5 Name_E 8.456 8.45660 6 Name_F 9.876 9.87600 7 Name_G 7.000 7.00000 8 Name_H 7.000 7.00015 9 Name_I 7.000 7.00030
推荐阅读
- matplotlib - 如何创建带有边缘直方图的热图,类似于联合图?
- java - 如何访问 Firebase DocumentSnapshot 的 onSuccess 方法中的变量值?
- json - 从 Ansible 任务输出中提取值并从中创建一个变量
- c++ - 在微服务 C++ 中运行 gRPC 服务器
- amazon-dynamodb - 具有全局二级索引的 DynamoDB 查询抛出“ValidationException:不支持查询键条件”
- database - 条件连接的 Postgres 索引
- c# - xml 的 noNamespaceSchemaLocation 中缺少 xsi
- python - 如果为空,则带有标题的 Scrapy 导出
- javascript - 生成路由“未定义”时出错:找不到此页面
- monitoring - Nagios 不会为插件创建性能数据