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

我有一个单列 vector ,实际上包含三个变量的两个观察值。如何将其转换为具有以下结构的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,则可以在stringsAsFactors = FALSE调用中指定data.frame

它看起来像这样:
> res
#  Code ID    Tag
#1    C  1 531404
#2    B  3 477644

注意:您必须在x中获得与oj​​it_code中的条目顺序一致的列名顺序。

如果要获得dfOrig$Value中指定的res的列顺序,可以使用以下命令:
res <- res[, match(x, names(res))]

关于r - 将单列数据框转换为具有多行和命名列的数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39464969/

10-12 16:50
查看更多