首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将data1转换为data2?

如何将data1转换为data2?
EN

Stack Overflow用户
提问于 2020-10-02 15:28:41
回答 2查看 62关注 0票数 1
代码语言:javascript
复制
 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,里面有一些错误。

代码语言:javascript
复制
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)
   }
}

我怎样才能解决这个问题,或者有一个更简单的方法来实现它呢?

EN

回答 2

Stack Overflow用户

发布于 2020-10-02 15:54:56

这个解决方案有点奇怪,但不需要任何包就可以工作

基本上,对于每一年,您都会创建数据帧的一个子集,然后将所有条目粘贴到“定位”列中

代码语言:javascript
复制
allyears <- unique(data2$year)
words <- sapply(allyears, function(x) paste0(subset(data2 , year %in% x)$locate, collapse=", "))

data.frame(year=allyears, locate=words)
票数 0
EN

Stack Overflow用户

发布于 2020-10-02 16:22:12

试试这个:

代码语言:javascript
复制
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 = "\\|")

输出

代码语言:javascript
复制
# 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 南召县   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64167680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档