【问题标题】:How do I specify a dynamic position for the start of substring?如何为子字符串的开头指定动态位置?
【发布时间】:2010-06-09 06:28:57
【问题描述】:

在示例中,我正在尝试 substring 我正在处理的 data.frame (video_data_2) 中的 Video_full 列。我想在这段时间之后保留所有字符。句点始终存在,只有一个句点,并且在列的每个值中处于不同的位置。

     Date                     Video_full      Instances   
1 Apr 1, 2010  installs/AA.intro_video_1      546         
2 Apr 1, 2010  installs/ABAC.intro_video_2    548      

我得到了子字符串来工作:

video_data_2$Video_full <- substring(video_data_2$Video_full,11)

还有strsplit

strsplit("installs/AA.intro_video_1 ",'[.]')

我只是不知道如何在动态位置启动substring,或者只保留strsplit 返回的第二个值。

感谢您为一个简单的问题提供的任何帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以使用 sub()

    video_data_2$Video_full <- sub("^.*\\.","", video_data_2$Video_full)
    

    【讨论】:

      【解决方案2】:

      strsplit的另一种使用方式

      sapply(strsplit(video_data_2$Video_full, "\\."), "[", 2)
      

      的简写
      sapply(strsplit(video_data_2$Video_full, "\\."), function(x) x[2])
      

      【讨论】:

      • +1 我非常喜欢使用“[”。这是什么意思? (R帮助中的解释在哪里?)
      • @gd047 索引运算符“[”是一个函数,您可以通过?"["(或help("["))获得它的帮助。您可以将其用作任何其他函数,例如:`[`(letters,3:5),但在问题或do.call 或其他必须直接提供函数名称的地方非常有用。
      • 感谢您提供此答案。我不知道为什么,但是当我运行这个函数时,我得到了一个“非字符参数”错误。有什么想法会导致这种情况吗?
      • 我想video_data_2$Video_fullfactor。所以试试sapply(strsplit(as.character(video_data_2$Video_full), "\\."), "[", 2)
      【解决方案3】:

      试试stringr

      library(stringr)
      str_split_fixed(video_data_2$Video_full, "\\.", n = 2)[, 2]
      

      【讨论】:

      • 此解决方案比其他解决方案慢得多。您可以看到 10,000 长度的向量。
      • 证明它!另外,除非您必须这样做,否则为什么要担心速度。
      • 感谢您的回答。我浏览了你的这个包的文档,并且会从中得到很多用处。但是,我无法安装它。我在 textmate 中使用 Rbundle 并尝试 install.packages("stringr", repos = "cran.r-project.org/src/contrib/stringr_0.3.tar.gz", type="source"),我收到的消息说包不可用。对不起,如果这应该是一个单独的问题。
      • 你应该只需要install.packages("stringr")。该路径不是有效的存储库。
      【解决方案4】:

      一种使用 strsplit 的方法

      video_data_2$Video_full <- sapply(strsplit(video_data_2$Video_full, "\\."),head)[2,]
      

      【讨论】:

      • 与@Marek 提供的第一个答案类似,我在尝试此操作时收到“非字符参数”错误。关于可能导致它的任何想法?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      • 2011-02-16
      相关资源
      最近更新 更多