gpt4 book ai didi

r - 将单列数据框转换为具有多行和命名列的数据框

转载 作者:行者123 更新时间:2023-12-02 09:23:55 24 4
gpt4 key购买 nike

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您可以指定 stringsAsFactors = FALSEdata.frame打电话。

它看起来像这样:

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

注意:您必须获取 x 中的列名称顺序与 dfOrig$Value 中的条目顺序一致.

如果想获取res的列顺序如 x 中指定,您可以使用以下内容:

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com