给定R中另一个变量的条件,你能从一个变量中提取最小值吗?

给定R中另一个变量的条件,你能从一个变量中提取最小值吗?,r,dplyr,R,Dplyr,假设我有以下最小可再现示例中的数据。我想用ready.data$RetAge from ready.data的最小值更新MinReadyAge变量,其中ready.data$ready=='Yes'。有没有一种有效的方法 对于任何年龄都没有“是”的情况,如果有返回“从未准备好”的方法,则可获得加分 ID <- c(1,2,3,4,5) MinReadyAge <- 1:5 min.age.data <- as.data.frame(cbind(ID,MinReadyAge))

假设我有以下最小可再现示例中的数据。我想用ready.data$RetAge from ready.data的最小值更新MinReadyAge变量,其中ready.data$ready=='Yes'。有没有一种有效的方法

对于任何年龄都没有“是”的情况,如果有返回“从未准备好”的方法,则可获得加分

ID <- c(1,2,3,4,5)
MinReadyAge <- 1:5

min.age.data <- as.data.frame(cbind(ID,MinReadyAge))

ID <- c(1,1,1,1,1,
        2,2,2,2,2,
        3,3,3,3,3,
        4,4,4,4,4,
        5,5,5,5,5)

RetAge <- rep(seq(from = 65, to = 69, by = 1),5)

Ready <- c("No","No","No","No","No",
           "No","No","No","No","Yes",
           "No","No","No","Yes","Yes",
           "No","No","Yes","Yes","Yes",
           "Yes","Yes","Yes","Yes","Yes")

ready.data <- as.data.frame(cbind(ID,RetAge,Ready))

ID我们可以在
slice
ing
min
ID的'RetAge'值之后,对'min.age.data'进行连接,其中'Ready'为“Yes”

库(dplyr)
就绪。数据%>%
过滤器(就绪==“是”)%>%
分组依据(ID)%>%
切片最小值(保留)%>%
解组%>%
选择(ID,MinRetAge=RetAge)%>%
右键连接(最小年龄数据)%>%
安排(ID)
#一个tibble:5x3
#ID MinRetAge MinReadyAge
#              
#1 NA 1
#2     2        69           2
#3     3        68           3
#4     4        67           4
#5     5        65           5

如果我们需要更新“MinRetAge”列

 min.age.data <- ready.data %>% 
    filter(Ready == 'Yes') %>% 
    group_by(ID) %>% 
    slice_min(RetAge) %>% 
    ungroup %>% 
    select(ID, RetAge) %>% 
    right_join(min.age.data) %>%
    transmute(ID, MinReadyAge = coalesce(RetAge, MinReadyAge)) %>%
    arrange(ID)
min.age.data%
过滤器(就绪==“是”)%>%
分组依据(ID)%>%
切片最小值(保留)%>%
解组%>%
选择(ID,重新标记)%>%
右键连接(最小年龄数据)%>%
transmute(ID,MinReadyAge=合并(RetAge,MinReadyAge))%>%
安排(ID)
-输出

min.age.data
# A tibble: 5 x 2
#     ID MinReadyAge
#  <dbl>       <dbl>
#1     1           1
#2     2          69
#3     3          68
#4     4          67
#5     5          65
min.age.data
#一个tibble:5x2
#ID MinReadyAge
#         
#1     1           1
#2     2          69
#3     3          68
#4     4          67
#5     5          65
数据
#//as.data.frame(不需要cbind,它将不必要地更改类型
#//默认情况下,cbind返回一个矩阵,矩阵只能有一种类型
#//而是直接使用data.frame

ready.data我是否应该结合连接将其拉入“min.age.data”数据框?@Ccs该列是在数据中创建的。您只需更新对象,即
ready.data%group\u by(ID)%%>%…
@Ccs我也使用连接方法进行了更新。我希望MinRetAge位于“min.age.data”数据框中,而不是“ready.data”数据框。也就是说,我想查找该结果并更新min.age.data$MinReadyAge变量。我试图避免在ready.data数据框中创建一个新变量。我想将这两个变量合并,然后删除该变量不会太麻烦。@CcS在这种情况下,只需对该数据集进行合并。请检查更新后的数据框输出
min.age.data
# A tibble: 5 x 2
#     ID MinReadyAge
#  <dbl>       <dbl>
#1     1           1
#2     2          69
#3     3          68
#4     4          67
#5     5          65
# // as.data.frame(cbind is not needed and it will unnecessarily chage the type
# // cbind by default returns a matrix and matrix can have only a single type
# // instead using data.frame directly
ready.data <- data.frame(ID, RetAge, Ready)
min.age.data <- data.frame(ID, MinReadyAge)