【问题标题】:R: Split character column and create two new onesR:拆分字符列并创建两个新的
【发布时间】:2018-08-10 22:57:49
【问题描述】:

R 用户

我有一个类似这样的数据框:

a <- c("John, 3 years") 
b <- c("Mokobe, 11 years")
c <- c("Ivan")
df <- rbind(a,b,c)
df
  [,1]              
a "John, 3 years"   
b "Mokobe, 11 years"
c "Ivan" 

我应该使用哪个函数来拆分逗号后的列以获取:

df
[,1]    [,2]
John    3 years
Mokobe  11 years
Ivan    NA

【问题讨论】:

  • 仅供参考,这是一个字符矩阵,而不是数据框,如 class(df) 所示

标签: r dataframe character na comma


【解决方案1】:

我们可以通过分隔符 , 执行 strsplitrbind list 元素,然后在末尾填充 NA 以使 length 对于每个 list 元素都相同

lst <- strsplit(df[,1], ", ")
do.call(rbind, lapply(lst, `length<-`, max(lengths(lst))))
#   [,1]     [,2]      
#a "John"   "3 years" 
#b "Mokobe" "11 years"
#c "Ivan"   NA       

【讨论】:

    【解决方案2】:

    使用 tidyr 库:

    library(tidyr)
    df <- as.data.frame(rbind(a,b,c), stringsAsFactors=F)
    separate(df, V1, c("name", "age"),sep = ",")
    

    【讨论】:

      【解决方案3】:

      只需通过read.csvfill=TRUEheader=FALSE 直接读取数据。您可以决定通过as.matrix()将其更改为矩阵

          read.csv(text=df,fill=T,header=F,na.strings = "")
            V1        V2
      1   John   3 years
      2 Mokobe  11 years
      3   Ivan      <NA>   
      

      转向矩阵。虽然没必要

      as.matrix(read.csv(text=df,fill=1,h=0,na.strings = ""))
           V1       V2         
      [1,] "John"   " 3 years" 
      [2,] "Mokobe" " 11 years"
      [3,] "Ivan"   NA   
      

      【讨论】:

        【解决方案4】:
        # This should work
        library(stringr)
        
        a <- c("John, 3 years") 
        b <- c("Mokobe, 11 years")
        c <- c("Ivan")
        df<- rbind(a,b,c)
        
        df<- str_split_fixed(df, ",", 2)
        

        【讨论】:

        • 虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
        • @NarendraJadhav 感谢您的建议。下次我会添加更多解释。我不是 Stack Overflow 的新手,但我是贡献者的新手。
        猜你喜欢
        • 1970-01-01
        • 2020-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-18
        • 1970-01-01
        • 2021-03-07
        相关资源
        最近更新 更多