【发布时间】:2020-10-01 03:30:50
【问题描述】:
我希望有条件地替换列中的值,我认为我需要一个循环。虽然我在基本层面上知道循环是如何工作的,但我没有使用它们的经验,所以我很难理解操作的顺序。使用数据框
df <- structure(list(player = c("p1", "p2", "p3", "p4", "p5", "p6",
"p7", "p8", "p9", "p10", "p11", "p1", "p2", "p3", "p4", "p5",
"p6", "p7", "p8", "p9", "p10", "p11", "p1", "p2", "p3", "p4",
"p5", "p6", "p7", "p8", "p9", "p10", "p11", "p1", "p2", "p3",
"p4", "p5", "p6", "p7", "p8", "p9", "p10", "p11", "p1", "p2",
"p3", "p4", "p5", "p6", "p7", "p8", "p9", "p10", "p11", "p1",
"p2", "p3", "p4", "p5", "p6", "p7", "p8", "p9", "p10", "p11"),
Date = c("D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1",
"D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1",
"D1", "D1", "D1", "D1", "D2", "D2", "D2", "D2", "D2", "D2",
"D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2",
"D2", "D2", "D2", "D2", "D2", "D2", "D3", "D3", "D3", "D3",
"D3", "D3", "D3", "D3", "D3", "D3", "D3", "D3", "D3", "D3",
"D3", "D3", "D3", "D3", "D3", "D3", "D3", "D3"), `Period Number` = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L), `IMA High Total` = c(0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 43L, 51L, 13L, 84L, 74L, 12L, 12L, 12L, 40L,
75L, 2L, 12L, 5L, 9L, 26L, 9L, 0L, 12L, 4L, 2L, 10L, 2L,
48L, 53L, 9L, 51L, 53L, 3L, 23L, 21L, 68L, 56L, 1L, 7L, 3L,
9L, 15L, 9L, 0L, 15L, 9L, 4L, 8L, 1L), Dur = c(67.6, 98.3,
50.5, 93.3, 97.5, 51, 42, 61.8, 94.7, 107.2, 42, 41.9, 41.9,
41.9, 41.9, 41.9, 41.9, 41.9, 41.9, 41.9, 41.9, 41.9, 62.5,
90.4, 44.5, 88.9, 87.3, 48.3, 40.2, 55.4, 84.5, 94.5, 40.2,
39.1, 39.1, 39.1, 39.1, 39.1, 39.1, 39.1, 39.1, 39.1, 39.1,
39.1, 75.4, 87.9, 42.2, 90.2, 86, 47.5, 49.8, 60.1, 104.3,
108.1, 42.2, 42.1, 42.1, 42.1, 42.1, 42.1, 42.1, 42.1, 42.1,
42.1, 42.1, 42.1)), row.names = c(727L, 728L, 729L, 730L,
731L, 732L, 733L, 734L, 735L, 736L, 737L, 738L, 739L, 740L, 741L,
742L, 743L, 744L, 745L, 746L, 747L, 748L, 793L, 794L, 795L, 796L,
797L, 798L, 799L, 800L, 801L, 802L, 803L, 804L, 805L, 806L, 807L,
808L, 809L, 810L, 811L, 812L, 813L, 814L, 859L, 860L, 861L, 862L,
863L, 864L, 865L, 866L, 867L, 868L, 869L, 870L, 871L, 872L, 873L,
874L, 875L, 876L, 877L, 878L, 879L, 880L), class = "data.frame")
我想将 D1 的“IMA 高总计”列中的 0 值替换为 D2 和 D3 的平均值,当 Dur > 1 时,“玩家”列和“周期数”列的条件。子集示例看起来像转这个
player Date Period Number IMA High Total Dur
727 p1 D1 0 0 67.6
738 p1 D1 1 0 41.9
793 p1 D2 0 43 62.5
804 p1 D2 1 12 39.1
859 p1 D3 0 48 75.4
870 p1 D3 1 7 42.1
进入这个
player Date Period Number IMA High Total Dur
727 p1 D1 0 46 67.6
738 p1 D1 1 10 41.9
793 p1 D2 0 43 62.5
804 p1 D2 1 12 39.1
859 p1 D3 0 48 75.4
870 p1 D3 1 7 42.1
如果有比循环更简单的方法,那就太好了!感谢您的帮助,stackoverflow 社区对我学习 R 语言非常有帮助。
【问题讨论】:
-
您能否添加一个示例来说明预期输出的外观?我真的不明白你描述中的“条件”应该做什么?
-
另一个问题:如果
Dur <= 1解决方案是否应该忽略大小写? -
添加了预期输出的示例。此外,如果 Dur
标签: r loops replace conditional-statements mean