如何用于标识数据框中事件的第一个和最后一个实例

时间:2018-03-16 06:20:40

标签: r loops dataframe

我有以下数据框。

> 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循环并获得结果?

或者有更好的方法来识别结果

1 个答案:

答案 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以获取满足条件的summarisefirst列名称

last