【发布时间】:2018-06-11 15:17:08
【问题描述】:
我在下面有一个数据框:
date group col1 col2 col3 col4 col5
1234 1 -2 3 4 -5 100
1235 1 4 5 -2 -7 200
1234 1 -5 2 9 1 400
1235 1 8 2 -4 7 900
1235 2 -72 83 -54 98 800
1233 2 32 -21 -1 4 900
1342 2 -54 0 -10 -11 100
1234 2 98 -8 -9 -10 100
这是我想做的:
对于列 df[,3] 到倒数第二列,我想执行以下操作:
1) 对于每一列,按组取正数的最小值和负数的最小值。
2) 然后使用这个逻辑替换当前值:
a) 如果值为正,则按组减去为正数找到的最小值。
b) 如果该值为负数,则按组减去为负数找到的最小值。
c) 如果值为0,则不做任何改变
3) 然后取该行中每个值减去的总值,并将其添加到最后一列值。
Minimum for col1 neg, group 1 = -5
Minimum for col1 pos, group 1 = 4
Minimum for col1 neg, group 2 = -72
Minimum for col1 pos, group 2 = 32
Minimum for col2 neg, group 1 = NA
Minimum for col2 pos, group 1 = 2
etc.
我希望我的最终输出如下所示:
date group col1 col2 col3 col4 col5
1234 1 -2-(-5) 3-2 4-4 -5-(-7) 100+(-5)+2+4+(-7)
1235 1 4-4 5-2 -2-(-4) -7-(-7) 200+4+2+(-4)+(-7)
1234 1 -5-(-5) 2-2 9-4 1-1 400+(-5)+2+4+1
1235 1 8-4 2-2 -4-(-4) 7-1 900+4+2+(-4)+1
1235 2 -72-(-72) 83-83 -54-(-54) 98-4 800+(-72)+83+(-54)+4
1233 2 32-32 -21-(-21) -1-(-54) 4-4 900+32+(-21)+(-54)+4
1342 2 -54-(-72) 0-0 -10-(-54) -11-(-11) 100+(-72)+0+(-54)+(-11)
1234 2 98-32 -8-(-21) -9-(-54) -10-(-11) 100+32+(-21)+(-54)+(-11)
预期输出:
date group col1 col2 col3 col4 col5
1234 1 3 1 0 2 94
1235 1 0 3 2 0 195
1234 1 0 0 5 0 402
1235 1 4 0 0 6 903
1235 2 0 0 0 94 761
1233 2 0 0 53 0 861
1342 2 18 0 44 0 -37
1234 2 66 13 45 1 46
【问题讨论】:
-
道歉是的意思是说分钟而已
-
你的尝试在哪里?
-
问题已经回答了。在我的实际数据集中,有可能导致此警告的 NA 值 -
In min(col4[col4 < 0]) : no non-missing arguments to min; returning -Inf。不确定这是否是基于@akrun 的回答的原因