簡體   English   中英

將單列數據框轉換為具有多行和命名列的數據框

[英]Convert single column dataframe to dataframe with multiple rows and named columns

dfOrig <- data.frame(rbind("1",
                       "C",
                       "531404",
                       "3",
                       "B",
                       "477644"))
setnames(dfOrig, "Value")

我有一個單列向量,實際上包含三個變量的兩個觀察值。 如何將其轉換為具有以下結構的data.frame:

ID      Code     Tag
"1"     "C"      "531404"
"3"     "B"      "477644"

顯然,這只是一個玩具示例,它用更多的觀察值和變量來說明一個實際問題。

這是另一種方法-它確實依賴dfOrig列以1,2,3,1,2,3的順序排序。

x <- c("ID", "Code", "Tag")    # new column names
n <- length(x)                 # number of columns
res <- data.frame(lapply(split(as.character(dfOrig$Value), rep(x, nrow(dfOrig)/n)), 
         type.convert))

結果數據為:

> str(res)
#'data.frame':  2 obs. of  3 variables:
# $ Code: Factor w/ 2 levels "B","C": 2 1
# $ ID  : int  1 3
# $ Tag : int  531404 477644

如您所見,列類已轉換。 如果希望“ Code列是character而不是factor ,則可以在data.frame調用中指定stringsAsFactors = FALSE

它看起來像這樣:

> res
#  Code ID    Tag
#1    C  1 531404
#2    B  3 477644

注意:您必須獲得x中的列名順序,以與dfOrig$Value條目的順序一致。

如果要獲得x指定的res的列順序,可以使用以下命令:

res <- res[, match(x, names(res))]

也許用nrow轉換為矩陣:

# set number of columns
myNcol <- 3

# convert to matrix, then dataframe
res <- data.frame(matrix(dfOrig$Value, ncol = myNcol, byrow = TRUE),
                  stringsAsFactors = FALSE)

# convert the type and add column names
res <- as.data.frame(lapply(res, type.convert),
                     col.names = c("resID", "Code", "Tag"))
res
#   resID Code    Tag
# 1     1    C 531404
# 2     3    B 477644

您可以創建一個seq號uence

x <- seq(1:nrow(dfOrig)) %% 3  #you can change this 3 to number of columns you need

data.frame(ID = dfOrig$Value[x == 1], 
           Code = dfOrig$Value[x == 2], 
           Tag = dfOrig$Value[x == 0])


#ID Code    Tag
#1  1    C 531404
#2  3    B 477644

另一種方法是根據上面生成的序列split數據幀,然后使用do.call綁定列

x <- seq(1:nrow(dfOrig))%%3
res <- do.call("cbind", split(dfOrig,x))

您絕對可以更改列名稱

colnames(res) <- c("Tag", "Id", "Code")

#  Tag       Id  Code
#3 531404     1     C
#6 477644     3     B

暫無
暫無

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

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