我有以下数据框。
> trial
# A tibble: 6 x 13
Company `Jan-17` `Feb-17` `Mar-17` `Apr-17` `May-17` `Jun-17` `Jul-17` `Aug-17` `Sep-17`
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 A 83. 0. 33. 52. 0. 91. 61. 0. 40.
2 B 0. 0. 0. 0. 0. 0. 0. 0. 0.
3 C 5. 69. 0. 63. 6. 58. 0. 0. 0.
4 D 48. 0. 0. 0. 0. 74. 93. 3. 18.
5 E 39. 0. 0. 0. 0. 0. 0. 0. 0.
6 F 0. 90. 0. 0. 0. 0. 0. 0. 0.
# ... with 3 more variables: `Oct-17` <dbl>, `Nov-17` <dbl>, `Dec-17` <dbl>
我想计算值为> 0的第一个月和值> 0的最后一个月
例如对于A公司,我需要答案为1月17日和9月17日
我有1000个这样的行,需要一种方法来计算上述结果。
如何使用for循环并获得结果?
或者有更好的方法来识别结果
答案 0 :(得分:1)
我们可以使用<form method="post">
</form>
中的max.col
来获取值大于0的每一行的列索引,然后使用base R
获取那些只有0的行,转换为到NA(rowSums
)并通过传递索引
NA^
的列名
names
使用i1 <- max.col(trial[-1] >0, 'first')
i2 <- max.col(trial[-1] > 0, 'last')
i3 <- NA^!rowSums(trial[-1] > 0)
names(trial)[-1][i1 *i3]
#[1] "Jan-17" NA "Jan-17" "Jan-17" "Jan-17" "Feb-17"
names(trial)[-1][i2 * i3]
#[1] "Sep-17" NA "Jun-17" "Sep-17" "Jan-17" "Feb-17"
,我们可以tidyverse
进入一个长期的&#39}。格式,然后gather
以获取满足条件的summarise
和first
列名称
last