【问题标题】:R Split String By Delimiter in a columnR按列中的分隔符拆分字符串
【发布时间】:2023-03-12 13:22:01
【问题描述】:

我有一个包含几行的文件。例如

A               B       C    
awer.ttp.net    Code    554
abcd.ttp.net    Code    747
asdf.ttp.net    Part    554
xyz.ttp.net     Part    747

我想使用 R 仅拆分表的 A 列,并且我想在 D 表中添加一个新列,其值为 awe、abcd、asdf 和 xyz。希望使用 dplyr 来完成。

【问题讨论】:

  • 欢迎来到 SO。如果您希望我们为您编写代码,这是错误的站点 :) 请参阅stackoverflow.com/help/on-topic 了解此处可能提出的问题。

标签: r dplyr


【解决方案1】:

您可以使用mutategsub

library(dplyr)
df = df %>% mutate(D=gsub("\\..*","",A))

              A    B   C    D
   awer.ttp.net Code 554 awer
   abcd.ttp.net Code 747 abcd
   asdf.ttp.net Part 554 asdf
    xyz.ttp.net Part 747  xyz

【讨论】:

  • 感谢您的回复。然而,我正在寻找更普遍适用的东西。就像我希望它能够工作,即使最后一部分不是 ttp.net,例如让我们说它的 yyp.net 或 ttp.abc.org 等
  • 如果您只想保留第一个点之前的内容,那么您可以使用gsub("\\..*","",A)。我将编辑我的答案。
【解决方案2】:

我们可以为此使用tidyverse

library(dplyr)
library(tidyr)
df1 %>% 
   separate(A, into = 'D', extra = 'drop', remove = FALSE) %>% 
   select(LETTERS[1:4])
#             A    B   C    D
#1 awer.ttp.net Code 554 awer
#2 abcd.ttp.net Code 747 abcd
#3 asdf.ttp.net Part 554 asdf
#4  xyz.ttp.net Part 747  xyz

【讨论】:

  • 我收到错误 LETTERS[1:4]: must resolve to integer column position, not character。此外,它可能不仅仅是前 4 个字母。我需要一切,直到第一个。不管字母的数量。
  • @AdamSmith 我正在使用dplyr_0.7.0 你能在没有select 步骤的情况下测试它吗
【解决方案3】:

首先我创建数据框:

library(dplyr)

data <- 
   data.frame(
        A=c("awer.ttp.net","abcd.ttp.net", "asdf.ttp.net", "xyz.ttp.net"),
        B=c("Code", "Code", "Part", "Part"),
        C=c(554,747,554,747), 
        stringsAsFactors = F
   )

然后以这种方式改变新列:

data %>% 
    mutate(
        D = strsplit(A, "[.]") %>% 
            as.data.frame() %>% 
            t %>% 
            data.frame(stringsAsFactors = F) %>% 
            pull(1)
   )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多