【问题标题】:Adding a space between two characters in a data frame in R在R中的数据框中的两个字符之间添加空格
【发布时间】:2012-10-07 07:41:33
【问题描述】:

我有一个数据框,其中每个单元格都是 2 个字符串(即:“AA”、“BC”、“CD”),我试图在两个字符之间放置空格,并且 NA 值保持为是。我似乎无法弄清楚这一点。有什么帮助????

这是一个示例数据框:

 df <- data.frame(col1=c("AB", "CD", "EF"), col2=c("AA", "BB", "CC"), col3=c("XX", "YY", NA))

这就是示例数据框的样子:

   col1 col2 col3
1   AB   AA   XX
2   CD   BB   YY
3   EF   CC <NA>

这就是我希望我的数据框的样子:

   col1  col2  col3
1   A B   A A   X X
2   C D   B B   Y Y
3   E F   C C   <NA>

提前致谢!

【问题讨论】:

    标签: string r character dataframe


    【解决方案1】:

    这是一种方法

    df2 <- data.frame(lapply(df, function(x) {
      levels(x) <- gsub("(.)(.)", "\\1 \\2", levels(x))
      return(x)
    }))
    
    df2
    
    #   col1 col2 col3
    # 1  A B  A A  X X
    # 2  C D  B B  Y Y
    # 3  E F  C C <NA>
    

    这当然依赖于这样一个假设,即在创建 data.frame df 时,参数 stringsAsFactorsTRUE

    【讨论】:

      【解决方案2】:

      如果您的 data.frame 列都是因素,那么您可以在级别上工作

      as.data.frame(lapply(df, function(x){
       .l <- unlist(lapply(strsplit(levels(x),''), paste, collapse = ' '))
         levels(x) <- .l
       x}))
      

      如果您的 data.frame 列是字符 (stringsAsFactors = FALSE)

      as.data.frame(lapply(df, function(x){
        .l <- unlist(lapply(strsplit(x,''), paste, collapse = ' '))
        .l
        }))
      

      【讨论】:

        【解决方案3】:

        如果它像你展示的那样简单,这是一种方法:

        data.frame(lapply(df, function(x){
            ifelse(is.na(x), NA, 
            paste(substring(x, 1, 1), substring(x, 2)))
        }))
        

        【讨论】:

          【解决方案4】:

          你试过了吗?

          df <- data.frame(col1=c("A B", "C D", "E F"), col2=c("A A", "B B", "C C"), col3=c("X X", "Y Y", NA))
          

          我试过了,我得到了你需要的东西,似乎太傻了!

          如果您动态获取列值,猜测您可以适当地使用pastestrsplit

          例子

          x <- "AB" 
          strsplit(x, '')
          [[1]]
          [1] "A" "B"
          

          那么你就可以使用这个并适当地使用paste

          【讨论】:

          • 您可以放心地假设 stackoverfow 上的每个答案都应该是动态的。