• R中根据匹配原则将一列拆分为几列的方法


    例如我们需要将一下数据的第二列从and处拆分为两列:

    before = data.frame(attr = c(1,30,4,6), type=c('foo_and_bar','foo_and_bar_2'))

     attr          type
    1    1   foo_and_bar
    2   30 foo_and_bar_2
    3    4   foo_and_bar
    4    6 foo_and_bar_2
    

    ==>

      attr type_1 type_2
    1    1    foo    bar
    2   30    foo  bar_2
    3    4    foo    bar
    4    6    foo  bar_2
    
    1. 使用stringr包的str_split_fixed函数
    library(stringr)
    str_split_fixed(before$type, "_and_", 2)
    
    1. 使用do.call函数 (do.call(what, args, quote = FALSE, envir = parent.frame())
    before <- data.frame(attr = c(1,30,4,6), type=c('foo_and_bar','foo_and_bar_2'))  
    out <- strsplit(as.character(before$type),'_and_') 
    do.call(rbind, out)
    
    1. 使用tidyr包
    library(dplyr)
    library(tidyr)
    before <- data.frame(attr = c(1, 30 ,4 ,6 ), type = c('foo_and_bar', 'foo_and_bar_2'))
    before %>% separate(type, c("foo", "bar"), "_and_")
    
    1. 使用sapply 以及 "["
    before$type_1 < sapply(strsplit(as.character(before$type),'_and_'), "[", 1)
    before$type_2 < sapply(strsplit(as.character(before$type),'_and_'), "[", 2)
    

    或者

    before <- data.frame(attr = c(1,30,4,6), type=c('foo_and_bar','foo_and_bar_2'))
    after <- with(before, data.frame(attr = attr))
    after <- cbind(after, data.frame(t(sapply(out, `[`))))
    names(after)[2:3] <- paste("type", 1:2, sep = "_")
    
    1. 使用unlist后重新划分矩阵
    before <- data.frame(attr = c(1,30,4,6), type=c('foo_and_bar','foo_and_bar_2'))
    tmp <- matrix(unlist(strsplit(as.character(before$type), '_and_')), ncol=2,byrow=TRUE) #you should show how many columns you would get after spliting
    after <- cbind(before$attr, as.data.frame(tmp))
    names(after) <- c("attr", "type_1", "type_2")
    
  • 相关阅读:
    C语言I作业12—学期总结
    C语言I博客作业11
    C语言I博客作业10
    预习非数值数据的编码方式
    计算机作业
    C语言||作业01
    C语言寒假大作战04
    C语言寒假大作战03
    C语言寒假大作战02
    C语言寒假大作战01
  • 原文地址:https://www.cnblogs.com/arkenstone/p/5444453.html
Copyright © 2020-2023  润新知