【问题标题】:make new row from certain pattern in column从列中的特定模式创建新行
【发布时间】:2016-09-30 08:53:53
【问题描述】:

我是 R 的新手,我必须想出一个在单个向量中出现某个字符串后创建新行的操作示例。

这里说明了向量:

address_list <- c("Road","Number","City","Zipcode","Telephone","House","Road","Number","City","Zipcode","House","Road","Number","City","Zipcode","Telephone","House")

该操作是每次“House”出现时创建一个新行。将向量放入一个矩阵中:

Road,Number,City,Zipcode,Telephone,House
road,Number,City,Zipcode,,House
road,Number,City,Zipcode,Telephone,House

我对 Excel 或 VBA 一无所知。但我可以想象这个问题与我希望在 R 中构建的操作有点相同。

VBA example

我想出了一些伪代码,它可能会给出一个更直观的例子来说明我应该如何思考以解决这个操作。

gsub(list, \s, ",")
For 
  every "House" in list as i
rbind(list, \n, i)

【问题讨论】:

    标签: r


    【解决方案1】:

    我们从向量 ('address_list') 中获取 unique 元素,遍历这些元素并提取 'address_list' 中的元素(或使用 splitlst &lt;- split(address_list, address_list)),在末尾填充 NA 为 @987654324 @ 元素的 length 小于最大值 length, cbind 它创建一个 matrix ('m1') 和 paste 与使用 ave 创建的序列。

     lst <- lapply(unique(address_list), function(x) address_list[address_list==x])
     m1 <- do.call(cbind, lapply(lst, `length<-`, max(lengths(lst))))
     m1[] <- ifelse(is.na(m1), NA, paste0(m1, ave(m1, m1, FUN = seq_along)))
     m1
     #     [,1]    [,2]      [,3]    [,4]       [,5]         [,6]    
     #[1,] "Road1" "Number1" "City1" "Zipcode1" "Telephone1" "House1"
     #[2,] "Road2" "Number2" "City2" "Zipcode2" "Telephone2" "House2"
     #[3,] "Road3" "Number3" "City3" "Zipcode3" NA           "House3"
    

    【讨论】:

    • 我想我弄错了,将向量命名为“列表”,我不确定“列表”是数据还是函数。
    • @Michael list 是一个函数
    • 我对问题做了一些修改。我意识到我犯了一些非常字面理解的交流错误。除了命名向量 adress_list 以便于识别。提前道歉!
    • @Michael 没关系.. 请检查输出,因为我用你的新名字更新了
    • 你能详细说明一下function(x) var[var==x]吗?我找不到任何可以启发您创建的功能的文档。我正在处理的数据来自我使用as.data.frame(read.table()) 导入的 txt 文件,我认为这可能是我最终无法获得首选输出的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 2020-06-09
    相关资源
    最近更新 更多