簡體   English   中英

將不規則的文本列拆分為R中的多個列

[英]Split irregular text column into multiple columns in r

我正在嘗試將一列分成多個以'_'為分隔符的列。 我在這里嘗試了解決方案:

將數據框字符串列拆分為多個不同的列

就我而言,問題似乎是“定界”文本段的數量在行之間變化(范圍從3到5),因為每次嘗試拆分字符串然后轉換為矩陣或數據幀時,我都會不斷收到錯誤。 這是您可以復制到R中的示例:

example<-structure(list(c1 = c(1, 2, 3), temp2 = structure(c(3L, 1L, 2L
), .Label = c("TR117_1119_HI_33", "TR504_1115_Su1_Y_4", "TR9_0817_2"
), class = "factor")), .Names = c("c1", "temp2"), row.names = c(NA, 
-3L), class = "data.frame")

對於此示例,最終我希望將'temp2'列解析為每個'_'來產生以下內容:

> Output
   new1 new2 new3 new4 new5
1   TR9 0817    2   NA   NA
2 TR117 1119   HI   33   NA
3 TR504 1115  Su1    Y    4

據我所知,這里沒有出現錯誤:

example$temp3<-as.character(example$temp2)
test<-strsplit(example$temp3,"_")

我是否需要使用for循環來逐行執行此操作,還是有一個更優雅的解決方案?

我們也可以使用tstrsplitlibrary(data.table)

library(data.table)#v1.9.6+
setnames(setDT(example)[, tstrsplit(temp2, '_')], paste0('new', 1:5))[]
#    new1 new2 new3 new4 new5
#1:   TR9 0817    2   NA   NA
#2: TR117 1119   HI   33   NA
#3: TR504 1115  Su1    Y    4

注意:它還具有type.convert參數,可以將其轉換為適當的類型。


cSplitlibrary(splitstackshape)

library(splitstackshape)
cSplit(example, 'temp2', '_')[,c1:=NULL][]

並使用上述setnames更改列名。


或使用base R read.table

read.table(text=as.character(example$temp2), sep="_", na.strings='',
                stringsAsFactors=FALSE,fill=TRUE, col.names=paste0('new', 1:5))
#   new1 new2 new3 new4 new5
#1   TR9  817    2 <NA>   NA
#2 TR117 1119   HI   33   NA
#3 TR504 1115  Su1    Y    4

您可以使用tidyr的split separate()

tidyr::separate(example[-1], temp2, paste0("new", 1:5), "_", fill = "right")
#    new1 new2 new3 new4 new5
# 1   TR9 0817    2 <NA> <NA>
# 2 TR117 1119   HI   33 <NA>
# 3 TR504 1115  Su1    Y    4

如果希望將新列轉換為適當的類型,請添加convert = TRUE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM