如何在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的意思是“我想将任何一行中的值与前面的行合并”(复数)。如果这不是真的,我们的任何解决方案都不会奏效;如果这是真的,我的解决方案就有点节俭了。