【发布时间】:2023-02-15 23:26:10
【问题描述】:
我有以下数据:
library(tidyverse)
df <- data.frame(result = c("no", "no", "no", "yes", "no", "yes"),
date = seq.Date(from = as.Date("01/01/1998", "%d/%m/%Y"),
to = as.Date("06/01/1998", "%d/%m/%Y"), by = "day"),
type = c("car", "truck", "bike", "wheel", "tyre", "lorry"))
df
# result date type
# 1 no 1998-01-01 car
# 2 no 1998-01-02 truck
# 3 no 1998-01-03 bike
# 4 yes 1998-01-04 wheel
# 5 no 1998-01-05 tyre
# 6 yes 1998-01-06 lorry
我的真实示例比这更复杂,但可以说我想为 result == yes 的第一次出现提取 type 的值,以下工作:
df1 <- df %>%
summarise(
type_yes = if (length(first(type[result == "yes"])) == 0)
NA
else first(type[result == "yes"]))
df1
# type_yes
# 1 wheel
如果我想创建一个变量(如果有的话)result == yes,并且想专门使用另一个if statement,则以下工作:
df1 <- df %>%
summarise(result = if (any(result == "yes"))
"yes"
else "no")
df1
# result
# 1 yes
但是,当我将它们组合在一个调用中时,我得到了错误的结果:
df1 <- df %>%
summarise(result = if (any(result == "yes"))
"yes"
else "no",
type_yes = if (length(first(type[result == "yes"])) == 0)
NA
else first(type[result == "yes"]))
df1
# result type_yes
# 1 yes car
#when i should be obtaining
# result type_yes
# 1 yes wheel
有人可以解释这里发生了什么吗?
谢谢
【问题讨论】:
标签: r if-statement dplyr