我有一个带有日期变量的数据框df。
locationID organe
<int> <date>
1 1940-04-01
2 1938-07-01
3 1938-07-01
4 1938-07-01
我想将日期与固定时间点进行比较,例如“ 1938-12-1”,以查找最早的日期。我使用了min函数,但失败了。
df %>% mutate(earliest=min(organe,as.Date("1938-12-1")))
locationID organe earliest
<int> <date> <date>
1 1940-04-01 1937-09-01
2 1938-07-01 1937-09-01
3 1938-07-01 1937-09-01
4 1938-07-01 1937-09-01
我不知道为什么min函数在这里不起作用,尽管在以下情况下效果很好
min(as.Date("1938-07-01"),as.Date("1938-12-1"))
[1] "1938-07-01"
有人可以帮忙吗?
答案 0 :(得分:2)
当输入自变量中的一个或两个都是长度大于1的向量时(如果两个长度都大于1,则假定长度相同),我们可以使用pmin/pmax
来获取最小值/最大值。 / p>
df %>%
mutate(earliest=pmin(organe,as.Date("1938-12-1")))
# A tibble: 4 x 3
# locationID organe earliest
# <int> <date> <date>
#1 1 1940-04-01 1938-12-01
#2 2 1938-07-01 1938-07-01
#3 3 1938-07-01 1938-07-01
#4 4 1938-07-01 1938-07-01
或在min
之后应用rowwise
df %>%
rowwise %>%
mutate(earliest=min(organe, as.Date("1938-12-1")))
请注意,min
返回一个值作为输出,即
min(5:1, 3)
#[1] 1
min(5:3, 1)
#[1] 1
对于矢量化最小值,请使用pmin
。根据{{1}}
pmax *()和pmin *()将一个或多个向量作为参数,将它们循环使用相同的长度,并返回一个向量,以给出参数向量的“平行”最大值(或最小值)。