簡體   English   中英

將列拆分為多列R.

[英]Split column into multiple columns R

我有一個數據框列,我需要拆分成3個單獨的列。 看起來像這樣:

I:500-600
I:700-900
II:200-250

我想將其拆分為以下3列:

V1 V2 V3
I 500 600
I 700 900
II 200 250

事實證明這比我希望的要復雜一些。 任何幫助,將不勝感激。

您可以使用strsplit和OR參數拆分使用:-這將為您提供一個可以進一步處理的列表。

> test <- c('I:500-600', 'I:700-900', 'II:200-250')
> do.call(rbind.data.frame, strsplit(test, ":|-"))
  c..I....I....II.. c..500....700....200.. c..600....900....250..
1                 I                    500                    600
2                 I                    700                    900
3                II                    200                    250

如果名字很重要

> as.data.frame(do.call(rbind, strsplit(test, ":|-")))
  V1  V2  V3
1  I 500 600
2  I 700 900
3 II 200 250

與另一種溶液str_matchstringr包:

x <- c("I:500-600", "I:700-900", "II:200-250")
library(stringr)
as.data.frame(str_match(x, "^(.*):(.*)-(.*)$")[,-1])
##   V1  V2  V3
## 1  I 500 600
## 2  I 700 900
## 3 II 200 250

在上面的正則表達式中,我們匹配3個子串:從開頭到: ,從:- ,從-到結尾。 每個匹配的子字符串將在結果對象中構成一個單獨的列。

其他選項包括tidyr extract

library(tidyr)
extract(df1, V1, into=c('V1','V2', 'V3'),
            '([^:]*):([0-9]*)-([0-9]*)', convert=TRUE)
#  V1  V2  V3
#1  I 500 600
#2  I 700 900
#3 II 200 250

tstrsplitdata.table

library(data.table)#v1.9.5+
setDT(df1)[, tstrsplit(V1, '[:-]', type.convert=TRUE)]
#   V1  V2  V3
#1:  I 500 600
#2:  I 700 900
#3: II 200 250

注意:兩個選項都有轉換輸出列類的參數

數據

df1 <- structure(list(V1 = c("I:500-600", "I:700-900", "II:200-250")), 
 .Names = "V1", class = "data.frame", row.names = c(NA, -3L))

我會從我的“splitstackshape”包中推薦cSplit

語法非常簡單: cSplit(yourInputDataFrame, yourSplittingColumn, theDelimiters)

這是一個vector的例子。 如果您已經有data.framedata.table則跳過data.table部分。

library(splitstackshape)
cSplit(data.table(x), "x", ":|-", fixed = FALSE)
#    x_1 x_2 x_3
# 1:   I 500 600
# 2:   I 700 900
# 3:  II 200 250

默認情況下,它還運行type.convert

str(.Last.value)
# Classes ‘data.table’ and 'data.frame':    3 obs. of  3 variables:
#  $ x_1: Factor w/ 2 levels "I","II": 1 1 2
#  $ x_2: int  500 700 200
#  $ x_3: int  600 900 250
#  - attr(*, ".internal.selfref")=<externalptr> 

暫無
暫無

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

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