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
中获得与ojit_code中的条目顺序一致的列名顺序。如果要获得
dfOrig$Value
中指定的res
的列顺序,可以使用以下命令:res <- res[, match(x, names(res))]
关于r - 将单列数据框转换为具有多行和命名列的数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39464969/