【问题标题】:R - Remove everything after the second space in a data frame columnR - 删除数据框列中第二个空格之后的所有内容
【发布时间】:2017-12-21 00:07:24
【问题描述】:

我在数据框中有一列,其中每条记录都是一个名称列表。

例如约翰·史密斯、简·史密斯、乔·史密斯、朱迪·史密斯等……

我想删除除整个列的名字之外的所有内容,基本上从第一个逗号开始,所以我的列将只有一个名称。

例如约翰·史密斯

我尝试过使用 sub、gsub、regex,但我迷路了。我大约两天前才开始使用 R,并且在遇到这个障碍之前做得很好。

任何帮助表示赞赏。

【问题讨论】:

  • 所以您希望列中的其余条目为 NA?示例:姓名、年龄 John Smith、25 NA、30 NA、40 ...
  • 我认为 Brian 的意思是每条记录(行)包含多个名称,他希望每行保留第一个。
  • 哦,好吧。这更有意义:)
  • 既然你从 R 开始,我会问额外的问题:你真的希望这个数据框有一个列,每个条目都是一个以逗号分隔的名称的字符串吗?或者,也许您正在从文件中读取 data.frame,并且它应该是每列一个名称?我问以防万一……
  • sapply(strsplit(df$name, ","), function(x) x[[1]]) 或更方便的sapply(strsplit(df$name, ","), [[, 1)

标签: r dataframe


【解决方案1】:

假设您的姓名位于数据框 mydata 中名为 Name 的列中,请先尝试此操作。它说“用空字符串替换逗号后面的任何内容”。

sub(",.+", "", mydata$Name)

如果看起来可行,请将结果分配给列:

mydata$Name <- sub(",.+", "", mydata$Name)

【讨论】:

  • 这正是我所需要的。谢谢一百万!
【解决方案2】:

如果你的数据框是这样的:

df = data.frame(names = c("John Smith, Jane Smith, Joe Smith, Judy Smith","Jane Smith, Joe Smith, Judy Smith","Joe Smith, Judy Smith","Judy Smith"))

> df
                                          names
1 John Smith, Jane Smith, Joe Smith, Judy Smith
2             Jane Smith, Joe Smith, Judy Smith
3                         Joe Smith, Judy Smith
4                                    Judy Smith

然后做:

df$first = sub(",.*","",df$names)

结果:

> df
                                          names      first
1 John Smith, Jane Smith, Joe Smith, Judy Smith John Smith
2             Jane Smith, Joe Smith, Judy Smith Jane Smith
3                         Joe Smith, Judy Smith  Joe Smith
4                                    Judy Smith Judy Smith

【讨论】:

    【解决方案3】:

    stringr 回答虽然是一样的

    pattern <- data.frame("colid" = c(1, 2), 
                          "text" = c("john smith, jane smith", "jon stewart, steven colbert"))
    pattern %>% 
      mutate(text2 = str_replace_all(text, ",.*", ""))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-15
      • 2012-05-19
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      相关资源
      最近更新 更多