我在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,这是我们的第二组值。现在更改
= 1F具有我们的第三组值,即1。现在Change
= 1 + 1G和H的值为0,这是我们的第三组值。现在更改
= 1 + 1 + 1I和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 ...
这是一个整洁的方法。我收集了较长的格式(从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
这里是data.table解决方案: