zoukankan      html  css  js  c++  java
  • 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")
    
  • 相关阅读:
    Hello, Fedora.
    Android与Linux分道扬镳
    VIM教程V1.5梁昌泰
    强大的NTFS文件系统
    Linux下的cc与gcc
    g++与gcc的区别
    Fedora下解压缩的相关问题
    The GNU C Reference Manual
    Linux Kbuild文档
    实验一:计算机是怎样工作的
  • 原文地址:https://www.cnblogs.com/arkenstone/p/5444453.html
Copyright © 2011-2022 走看看