【问题标题】:Removing unwanted comma and updating a column删除不需要的逗号并更新列
【发布时间】:2015-04-17 18:42:12
【问题描述】:

我有一个这样的数据集

      Id         Comments
      1          ,,,,A,,,,,B,,,,,,C
      2          ,,,,,,A,,,,,,,C,,,
      3          
      4          ,,,,,,,,,,Z,,,,,,,,

我想要产生的是这样的输出

      Id    Feedback     Comments
      1     Yes          A,B,C
      2     Yes          A,C
      3     NA     
      4     Yes          Z

在这里需要帮助。

-----------实际数据的子集-------- -----

     t9 = structure(list(ID = c(242938L, 309790L, 339402L), Description = c("", 
                                                              " , , , , , , , , , , , A, , , , , , , , , , , B, , , , , , C, , , , D, , , , , , , , , , E, , , , , , , , , , , F", 
                                                              " , , A, , , D, , , , , , , , , S, , , , , , , D")), .Names = c("ID", "Comments"), row.names = c(NA, 3L), class = "data.frame")

【问题讨论】:

    标签: r if-statement substring gsub


    【解决方案1】:

    您可以使用gsub 删除不需要的“,”,根据“评论”中的元素是否为空字符串(nzchar)创建一个新列(“反馈”)。

    df1$Comments <- gsub(',+', ',', gsub('^,+|,+$', '', df1$Comments))
    df1$Feedback <- ifelse(nzchar(df1$Comments), 'Yes', NA)
    df1
    #  Id Comments Feedback
    #1  1    A,B,C      Yes
    #2  2      A,C      Yes
    #3  3              <NA>
    #4  4        Z      Yes
    

    或者您可以更改“评论”列

    library(stringr)
    df1$Comments <- sapply(str_extract_all(df1$Comments, '[A-Za-z]+'), toString)
    

    更新

    使用t9数据,去掉“空格”,使用上面的代码

    t9$Comments <- gsub(' ', '', t9$Comments)
    (t9$Comments <- gsub(',+', ',', gsub('^,+|,+$', '', t9$Comments)))
     #[1] ""            "A,B,C,D,E,F" "A,D,S,D"    
    

    数据

    df1 <-   structure(list(Id = 1:4, Comments = c(",,,,A,,,,,B,,,,,,C",
     ",,,,,,A,,,,,,,C,,,", 
     "", ",,,,,,,,,,Z,,,,,,,,")), .Names = c("Id", "Comments"),
    class =    "data.frame", row.names = c(NA, -4L))
    

    【讨论】:

    • 我尝试了你的代码,gsub 没有工作,但 ifelse 工作,我使用 dput 函数用我的实际数据的子集更新了我的问题
    • 虽然当我打开数据框 t9 ` view(t9) ` 时输出控制台显示 #[1] "" "A,B,C,D,E,F" "A,D,S,D" 还是一样,但没有改变
    • @KimJenkins 您必须将输出分配给列。即t9$Comments &lt;- gsub(',+', ',', gsub('^,+|,+$', '', t9$Comments))
    • 上次我尝试这个没有用,然后我改变了我的逻辑,看看它是否让事情变得更容易,所以我稍微改变了我的数据集。
    猜你喜欢
    • 2016-03-07
    • 1970-01-01
    • 2017-01-05
    • 2022-01-23
    • 2022-01-21
    • 2023-01-26
    • 1970-01-01
    相关资源
    最近更新 更多