如何在dplyr中使用lappy

如何在dplyr中使用lappy,r,dplyr,R,Dplyr,输入 structure(list(DistalLESfromnarescm = c("31.9", "33.1:33.3", "33.8", "34.0"), LESmidpointfromnarescm = c("31.2", "32.0", "33.1", "33.2"), ProximalLESfromnarescm = c( "30.1", "30.9", "31.8", "31.9"), LESlengthcm = c( "1.8", "

输入

structure(list(DistalLESfromnarescm = c("31.9",  
   "33.1:33.3", "33.8", "34.0"), LESmidpointfromnarescm = c("31.2", 
    "32.0",  "33.1", "33.2"), ProximalLESfromnarescm = c( 
    "30.1", "30.9",  "31.8", "31.9"), LESlengthcm = c( 
     "1.8", "2.2:2.5", "2.0", "2.1"), EsophageallengthLESUEScenterscm = c( 
     "12.1", "14.0:15.0", "15.1", NA), PIPfromnarescm = c( 
     "37.8", "No",  "34.3", "35.8"), Hosp_Id = c( "A",  
     "B", "C", "D")), .Names = c("DistalLESfromnarescm", "LESmidpointfromnarescm", 
     "ProximalLESfromnarescm", "LESlengthcm", "EsophageallengthLESUEScenterscm", 
     "PIPfromnarescm", "Hosp_Id"), row.names = c(NA, -4L), class = "data.frame")
我有一个数据框,如下所示:

 structure(list(DistalLESfromnarescm = c("31.9", "31.9", "33.1", 
"33.3", "33.8", "34.0"), LESmidpointfromnarescm = c("31.2", "31.2", 
"32.0", "32.0", "33.1", "33.2"), ProximalLESfromnarescm = c("30.1", 
"30.1", "30.9", "30.9", "31.8", "31.9"), LESlengthcm = c("1.8", 
"1.8", "2.2", "2.5", "2.0", "2.1"), EsophageallengthLESUEScenterscm = c("12.1", 
"12.1", "14.0", "15.0", "15.1", NA), PIPfromnarescm = c("37.8", 
"37.8", "No", "No", "34.3", "35.8"), Hosp_Id = c("A", "A", "B", 
"B", "C", "D")), .Names = c("DistalLESfromnarescm", "LESmidpointfromnarescm", 
"ProximalLESfromnarescm", "LESlengthcm", "EsophageallengthLESUEScenterscm", 
"PIPfromnarescm", "Hosp_Id"), row.names = c(NA, -6L), class = "data.frame")
目标

我想将任何一行中的值与前一行合并,如果: a) 医院号码是相同的 b) 分组行之间的特定列中的值不相同

我的问题是如何在
dplyr
lappy
,因为我不知道在lappy语句的左侧引用什么

尝试1

    result2 <- Question %>% 
      group_by(HospNum_Id,DistalLESfromnarescm)%>%
      ifelse(HospNum_Id==lag(HospNum_Id),
lapply(WHAT DO I REFER TO HERE function(x) ifelse(x==lag(x), x,paste0(x,"::",lead(x)),"No")),"No")

这里有一个
dplyr
选项

library(dplyr)
df1 %>% 
  group_by(Hosp_Id) %>% 
  summarise_all(.funs = function(x) paste(unique(c(dplyr::lag(x, default = NULL), x)), collapse = ":"))
# A tibble: 4 x 7
#  Hosp_Id DistalLESfromnarescm LESmidpointfromnarescm ProximalLESfromnarescm LESlengthcm EsophageallengthLESUEScenterscm PIPfromnarescm
#  <chr>   <chr>                <chr>                  <chr>                  <chr>       <chr>                           <chr>         
#1 A       31.9                 31.2                   30.1                   1.8         12.1                            37.8          
#2 B       33.1:33.3            32.0                   30.9                   2.2:2.5     14.0:15.0                       No            
#3 C       33.8                 33.1                   31.8                   2.0         15.1                            34.3          
#4 D       34.0                 33.2                   31.9                   2.1         NA                              35.8          
库(dplyr)
df1%>%
组别(住院医生Id)%>%
汇总所有(.funs=function(x)粘贴(唯一(c(dplyr::lag(x,默认值=NULL),x)),collapse=“:”)
#一个tibble:4x7
#Hosp_Id从Narescm近端将中间点从Narescm近端将中间点从Narescm近端将中间点从Narescm短端从Narescm近端将中间点从Narescm近端将中间点从Narescm近端从Narescm近端将中间点从Narescm近端从Narescm近端将中间点从Narescm近端从Narescm
#                                                                                                    
#1 A 31.9 31.2 30.1 1.8 12.1 37.8
#2 B 33.1:33.3 32.0 30.9 2.2:2.5 14.0:15.0否
#3 C 33.8 33.1 31.8 2.0 15.1 34.3
#4 D 34.0 33.2 31.9 2.1 NA 35.8
数据

df1 <- structure(list(DistalLESfromnarescm = c("31.9", "31.9", "33.1", 
"33.3", "33.8", "34.0"), LESmidpointfromnarescm = c("31.2", "31.2", 
"32.0", "32.0", "33.1", "33.2"), ProximalLESfromnarescm = c("30.1", 
"30.1", "30.9", "30.9", "31.8", "31.9"), LESlengthcm = c("1.8", 
"1.8", "2.2", "2.5", "2.0", "2.1"), EsophageallengthLESUEScenterscm = c("12.1", 
"12.1", "14.0", "15.0", "15.1", NA), PIPfromnarescm = c("37.8", 
"37.8", "No", "No", "34.3", "35.8"), Hosp_Id = c("A", "A", "B", 
"B", "C", "D")), .Names = c("DistalLESfromnarescm", "LESmidpointfromnarescm", 
"ProximalLESfromnarescm", "LESlengthcm", "EsophageallengthLESUEScenterscm", 
"PIPfromnarescm", "Hosp_Id"), row.names = c(NA, -6L), class = "data.frame")

df1感谢您提供的输入。现在,如果您可以提供示例输出,您将有一个完整描述的问题@根据要求重新生成所需输出参见本[r-faq]关于总结几个(所有)变量的内容,也可使用
dplyr
:我认为不需要
lag
;我只会使用
函数(x)粘贴(unique(x),collapse=“:”
…或
函数(x)
d%>%groupby(Hosp\u Id)%>%summary\u all(funs(粘贴(唯一的(.),collapse=“:”))
@Ista包含
lag
,因为OP写了“我想将任何一行中的值与前一行合并”。如果每组只有两行,那么你和@Henrik的方法将是正确的。这取决于你对问题的理解,但不是常识性的解释,OP的意思是“我想将任何一行中的值与前面的行合并”(复数)。如果这不是真的,我们的任何解决方案都不会奏效;如果这是真的,我的解决方案就有点节俭了。