【发布时间】:2021-02-01 15:31:01
【问题描述】:
这里是一个 df 示例:
test_df <- structure(list(plant_sp = c("plant_1", "plant_1", "plant_2", "plant_2", "plant_3",
"plant_3", "plant_3", "plant_3", "plant_3", "plant_4",
"plant_4", "plant_4", "plant_4", "plant_4", "plant_4",
"plant_5", "plant_5", "plant_5", "plant_5", "plant_5"),
sp_rich = c(1, 1, NA, 1, NA,
1, 0, 0, NA, 0,
0, 1, 0, 0, 1,
0, NA, NA, 0,NA)),
row.names = c(NA, -20L), class = "data.frame",
.Names = c("plant_sp", "sp_rich"))
我正在尝试通过以下方式使用 tidyverse 创建一个 ifelse 声明: 按“plant_sp”列对每个组 检查“sp_rich”列中的值是否为.na 如果是,则在名为“is_na_nest_row”的新列中设置值“1”。 我设法做到了以下几点:
test_df %>%
group_by(plant_sp) %>%
mutate(is_na_nest_row = ifelse(???,1,0))
但我不知道如何在 sp_rich 列中引用值,但在下一行(在一个组中)
例如:
如果第 4 行的 sp_rich 下有空行,我希望值“1”在第 3 行的 is_na_nest_row 之下。
非常感谢, 伊多
【问题讨论】:
-
(1) 如果您使用
dplyr,请改用if_else,因为base::ifelse有一些issues。 (2) 坦率地说,你在这里不需要它,因为你可以说mutate(is_na_nest_row = +is.na(sp_rich))来达到同样的效果(虽然它是整数,而不是你这里的浮点数)。 -
不会检查同一行是否有 na.value 吗?敌人示例 - 如果第 4 行的“sp_rich”下有空行,我希望值“1”位于第 3 行。我添加了一个示例,因为我之前不清楚,谢谢!