计算类别在R中一行的变化的时间条纹数

问题描述 投票:-1回答:2

我在R中具有以下数据框:

Row number   A   B   C   D   E   F   G   H   I   J
1                1   1   0   0   1   0   0   1   1
2                    1   0   0   0   1   0   0   1
3                1   0   0   0   1   0   0   1   1

我正在尝试计算数字在1到0之间变化的次数(不包括Null)>

我期望的结果是这个

Row Number    No of changes
----------    --------------
1                4
2                4
3                4

第1行的说明

在第1行,A为空,因此我们将其排除在外。

B和C具有1,这是我们的第一组值。

D和E具有0,这是我们的第二组值。现在更改

= 1

F具有我们的第三组值,即1。现在Change

= 1 + 1

G和H的值为0,这是我们的第三组值。现在更改

= 1 + 1 + 1

I和J有1,这是我们的第四组值。现在更改

= 1 + 1 + 1 + 1 = 4

我在R中具有以下数据帧:行号A B C D E F G H I J 1 1 1 0 0 1 0 0 1 1 2 1 0 0 0 1 0 0 1 3 ...

r
2个回答
1
投票

这是一个整洁的方法。我收集了较长的格式(从tidyr::pivot_longer开始),然后添加一个辅助列,以指出从0到1或从1到0的更改,然后按行求和。

library(tidyverse)            
df %>%
  # before tidyr 1.0, this would be   gather(col, value, -1)
  pivot_longer(-1, "col") %>%
  group_by(Row.number) %>%
  mutate(chg = value == 1 & lag(value) == 0 |
           value == 0 & lag(value) == 1) %>%
  summarize(no_chgs = sum(chg, na.rm = T))


# A tibble: 3 x 2
  Row.number no_chgs
       <int>   <int>
1          1       4
2          2       4
3          3       4

0
投票

这里是解决方案:

© www.soinside.com 2019 - 2024. All rights reserved.