data1 <- data.frame(year = c(2001,2002,2003,2004),
locate = c("鄂托克旗、乌海市四合木等","北京市大兴区", "三门峡、洛阳、焦作等市","西峡、南召等县"))
data2 <- data.frame(year = c(2001,2001,2002,2003,2003,2003,2004,2004,2004),
locate = c("鄂托克旗","乌海市四合木","北京市大兴区","三门峡市","洛阳市","焦作市","西峡县","南召县")) 我想把data1变成data2。我试着用一个函数来实现it.but,里面有一些错误。
pad_city <- function(x,str_detect(x,"等(市|县|)") = TRUE){
if(str_detect(x, "等$")){
x <- str_remove(x,"等$")
} else {
last_chr <- str_sub(x,nchar(x),nchar(x))
x <- str_split(x, "、")[[1]]
x <- paste0(x, last_chr)
}
}我怎样才能解决这个问题,或者有一个更简单的方法来实现它呢?
发布于 2020-10-02 15:54:56
这个解决方案有点奇怪,但不需要任何包就可以工作
基本上,对于每一年,您都会创建数据帧的一个子集,然后将所有条目粘贴到“定位”列中
allyears <- unique(data2$year)
words <- sapply(allyears, function(x) paste0(subset(data2 , year %in% x)$locate, collapse=", "))
data.frame(year=allyears, locate=words)发布于 2020-10-02 16:22:12
试试这个:
library(dplyr)
library(tidyr)
parse_chinese <- function(x) {
end <- sub("(.+)等(市|县)?$", "\\2", x)
x <- sub("等", "", x)
stringr::str_replace_all(x, "、", paste0(end, "|"))
}
data1 %>% mutate(locate = parse_chinese(locate)) %>% separate_rows(locate, sep = "\\|")输出
# A tibble: 8 x 2
year locate
<dbl> <chr>
1 2001 鄂托克旗
2 2001 乌海市四合木
3 2002 北京市大兴区
4 2003 三门峡市
5 2003 洛阳市
6 2003 焦作市
7 2004 西峡县
8 2004 南召县 https://stackoverflow.com/questions/64167680
复制相似问题