追加包含列名的df以分隔没有列名但对应数据点的df
Append df containing column names to separate df without column names but corresponding datapoints
我实际上是在尝试将列名添加到没有列名的数据框中。我有两个数据框,其中一个的尺寸为 1 x 95(1 行包含 95 个值,这些值是对应于第二个 df 的 95 列的列名,其尺寸为 146048 x 95 但没有列名)。我不能使用 rbind,因为两个 df 显然没有相同的列名,并且出于某种原因,当我使用 'append' 时,它会使结果 df 中的列数加倍(尺寸 = 146048 x 190)。有人知道为什么我使用 'append' 时会发生这种情况吗?任何人都可以提出一个解决方案来实现我想要做的事情吗?
谢谢!
这样的事情怎么样。在下面的示例中,x
是一个数据框,vn
也是一个数据框,但它的唯一行包含 x
的变量名称。您可以在 x
上使用 setNames()
将其名称更改为 vn
的第一行。
x <- matrix(rnorm(10), ncol=5)
x <- as.data.frame(x)
x
# V1 V2 V3 V4 V5
# 1 0.1600919 1.375629 0.2838454 1.403162 0.7560366
# 2 0.3596158 1.594954 0.6369160 -1.368186 -0.2590074
vn <- matrix(paste("var", 1:5, sep="_"), nrow=1)
vn <- as.data.frame(vn)
x <- setNames(x, vn[1,])
x
# var_1 var_2 var_3 var_4 var_5
# 1 0.1600919 1.375629 0.2838454 1.403162 0.7560366
# 2 0.3596158 1.594954 0.6369160 -1.368186 -0.2590074
这很容易。
假设我们有一个像这样的 3 列和 2 行的空数据框:
df.a <- as.data.frame(matrix(nrow = 2, ncol = 3))
然后我们有一个 3 列和 1 行的数据框,如下所示:
df.b <- as.data.frame(c("one","two","three"))
要将 df.b
的第一行作为列名分配给 df.a
,我们这样做:
names(df.b) <- df.b[,1]
这意味着子集 df.b
占据第一行 - 这将是 3 个元素的字符向量 - 与我们必须命名的列一样多。我们将这个向量分配给另一个数据框中的列的名称。在您的情况下,它是 95 列,但只要两个数据框中的长列号匹配,就没有关系。
当您想要更正列名时,使用此语法通常很方便 - 您基本上可以就地编辑列名。例如 names(df.a) <- gsub("\.$", "", names(df.a)
将删除列名中的尾随点(替换为空)。
我实际上是在尝试将列名添加到没有列名的数据框中。我有两个数据框,其中一个的尺寸为 1 x 95(1 行包含 95 个值,这些值是对应于第二个 df 的 95 列的列名,其尺寸为 146048 x 95 但没有列名)。我不能使用 rbind,因为两个 df 显然没有相同的列名,并且出于某种原因,当我使用 'append' 时,它会使结果 df 中的列数加倍(尺寸 = 146048 x 190)。有人知道为什么我使用 'append' 时会发生这种情况吗?任何人都可以提出一个解决方案来实现我想要做的事情吗?
谢谢!
这样的事情怎么样。在下面的示例中,x
是一个数据框,vn
也是一个数据框,但它的唯一行包含 x
的变量名称。您可以在 x
上使用 setNames()
将其名称更改为 vn
的第一行。
x <- matrix(rnorm(10), ncol=5)
x <- as.data.frame(x)
x
# V1 V2 V3 V4 V5
# 1 0.1600919 1.375629 0.2838454 1.403162 0.7560366
# 2 0.3596158 1.594954 0.6369160 -1.368186 -0.2590074
vn <- matrix(paste("var", 1:5, sep="_"), nrow=1)
vn <- as.data.frame(vn)
x <- setNames(x, vn[1,])
x
# var_1 var_2 var_3 var_4 var_5
# 1 0.1600919 1.375629 0.2838454 1.403162 0.7560366
# 2 0.3596158 1.594954 0.6369160 -1.368186 -0.2590074
这很容易。
假设我们有一个像这样的 3 列和 2 行的空数据框:
df.a <- as.data.frame(matrix(nrow = 2, ncol = 3))
然后我们有一个 3 列和 1 行的数据框,如下所示:
df.b <- as.data.frame(c("one","two","three"))
要将 df.b
的第一行作为列名分配给 df.a
,我们这样做:
names(df.b) <- df.b[,1]
这意味着子集 df.b
占据第一行 - 这将是 3 个元素的字符向量 - 与我们必须命名的列一样多。我们将这个向量分配给另一个数据框中的列的名称。在您的情况下,它是 95 列,但只要两个数据框中的长列号匹配,就没有关系。
当您想要更正列名时,使用此语法通常很方便 - 您基本上可以就地编辑列名。例如 names(df.a) <- gsub("\.$", "", names(df.a)
将删除列名中的尾随点(替换为空)。