如何使用 dplyr 根据同一行中的单元格与数据框列中的下一个单元格的比较来改变单元格
How to mutate a cell based on the comparison of a cell in same row to the next cell in a data frame column using dplyr
我正在尝试使用 dplyr 根据同一行中的一个单元格与同一列中的下一个单元格的比较来改变一个单元格。
我阅读了一些帖子,但找不到解决我问题的方法。
例如,我有以下数据:
sampleframe <- data.frame("value1" = c(15,18,18,22,19,19,25,20,20),
"value2" = c(rep(NA,9)))
我想要的是,如果列 value1 中的单元格的值与列 value1 中的下一个单元格的值相同,则列 value2 中的单元格被 1 覆盖。
想要的结果:
这个想法行不通:
df <- sampleframe %>%
mutate(value2 = case_when(identical(value1, lead(value1)) ~ 1, TRUE ~ as.numeric(value2)))
对可以做到这一点的语法有什么建议吗?
你已经快到了 ;)
sampleframe %>%
mutate(value2= case_when(
value1 == dplyr::lead(value1) ~ 1,
TRUE ~ NA_real_
))
value1 value2
1 15 NA
2 18 1
3 18 NA
4 22 NA
5 19 1
6 19 NA
7 25 NA
8 20 1
9 20 NA
if_else
选项使用 dplyr
:
library(dplyr)
sampleframe %>% mutate(value2 = if_else(value1 == lead(value1), 1, NA_real_))
输出:
value1 value2
1 15 NA
2 18 1
3 18 NA
4 22 NA
5 19 1
6 19 NA
7 25 NA
8 20 1
9 20 NA
ifelse
选项使用 base
:
transform(sampleframe, value2 = ifelse(value1 == c(tail(value1, -1), NA), 1, NA))
输出:
value1 value2
1 15 NA
2 18 1
3 18 NA
4 22 NA
5 19 1
6 19 NA
7 25 NA
8 20 1
9 20 NA
我正在尝试使用 dplyr 根据同一行中的一个单元格与同一列中的下一个单元格的比较来改变一个单元格。 我阅读了一些帖子,但找不到解决我问题的方法。
例如,我有以下数据:
sampleframe <- data.frame("value1" = c(15,18,18,22,19,19,25,20,20),
"value2" = c(rep(NA,9)))
我想要的是,如果列 value1 中的单元格的值与列 value1 中的下一个单元格的值相同,则列 value2 中的单元格被 1 覆盖。
想要的结果:
这个想法行不通:
df <- sampleframe %>%
mutate(value2 = case_when(identical(value1, lead(value1)) ~ 1, TRUE ~ as.numeric(value2)))
对可以做到这一点的语法有什么建议吗?
你已经快到了 ;)
sampleframe %>%
mutate(value2= case_when(
value1 == dplyr::lead(value1) ~ 1,
TRUE ~ NA_real_
))
value1 value2
1 15 NA
2 18 1
3 18 NA
4 22 NA
5 19 1
6 19 NA
7 25 NA
8 20 1
9 20 NA
if_else
选项使用 dplyr
:
library(dplyr)
sampleframe %>% mutate(value2 = if_else(value1 == lead(value1), 1, NA_real_))
输出:
value1 value2
1 15 NA
2 18 1
3 18 NA
4 22 NA
5 19 1
6 19 NA
7 25 NA
8 20 1
9 20 NA
ifelse
选项使用 base
:
transform(sampleframe, value2 = ifelse(value1 == c(tail(value1, -1), NA), 1, NA))
输出:
value1 value2
1 15 NA
2 18 1
3 18 NA
4 22 NA
5 19 1
6 19 NA
7 25 NA
8 20 1
9 20 NA