r-检查是否有带图案的行,否则插入一行



我有一个类似以下的df:

ID          Comment1    Comment2
X9999       text        text
X9999.000   text        text
Y8888       text        text
Y8888.111   text        text
Z7777.555   text        text

在第一列中,有Id和子Id。Id类似X9999,子Id类似X9999.999。我如何让R检查是否有没有相应Id行的太阳Id行,以及是否没有插入Id行?

您可以使用dplyr对排除.xxx部分的唯一代码执行full_join

library(dplyr)
df2 <- full_join(df,data.frame(ID=unique(gsub('\..*','',df$ID))))

我们可以按ID(减去子id组件(进行分组,然后我们可以找到任何没有主id的组。然后,如果没有主id,我们可以使用uncount来复制行。然后,对于第一行,我们可以删除子id组件。

library(tidyverse)
df %>%
group_by(grp = str_replace_all(ID, "\..*", "")) %>%
mutate(duplicate_row = !any(ID == grp)) %>%
uncount(case_when(duplicate_row ~ 2, TRUE ~ 1)) %>%
mutate(ID = ifelse(row_number() == 1 &
duplicate_row == TRUE, str_replace_all(ID, "\..*", ""), ID)) %>% 
ungroup %>% 
select(names(df))

输出

ID        Comment1 Comment2
<chr>     <chr>    <chr>   
1 X9999     text     text    
2 X9999.000 text     text    
3 Y8888     text     text    
4 Y8888.111 text     text    
5 Z7777     text     text    
6 Z7777.555 text     text   

数据

df <- structure(list(ID = c("X9999", "X9999.000", "Y8888", "Y8888.111", 
"Z7777.555"), Comment1 = c("text", "text", "text", "text", "text"
), Comment2 = c("text", "text", "text", "text", "text")), class = "data.frame", row.names = c(NA, 
-5L)) 

相关内容

  • 没有找到相关文章

最新更新