在这个简短的教程中,你将学习如何在R中向数据框架添加一列。更具体地说,你将学习1)使用基础R添加一列(即使用$-operator和括号),2)使用add_column()函数添加一列(即来自tibble),3)添加多列,以及4)从一个数据框架添加列到另一个。

如何将列添加到数据框架中
注意,当用tibble添加一个列时,我们也要使用dplyr中的%>% 操作符。注意,dplyr,以及tibble,有很多有用的函数,除了使我们能够添加列之外,还能使我们很容易地从R数据框架中按名称删除一个列(例如,使用select() 函数)。
概要
首先,在阅读一个来自Excel文件的示例数据集之前,你将得到几个问题的答案。第二,我们将看一下学习本教程的前提条件。第三,我们将看一下如何使用首先是基础R,然后是使用tibble和add_column() 函数向数据框架添加新列。在本节中,使用dplyr和add_column() ,我们还将快速了解如何添加一个空列。注意,我们还将在其他列的基础上追加一个列。此外,在最后两节中,我们将学习如何使用tibble向数据框架插入多列。
前提条件
在本教程中,我们将在R中执行一个简单的数据操作任务,如果你想使用add_column() 和mutate() 函数以及%>%操作符,你只需要安装dplyr和tibble。然而,如果你想读取示例数据,你还需要安装readr包。
可能值得注意的是,所有提到的软件包都是Tidyverse的一部分。这个包里有很多工具,可以用来清理数据、可视化数据(比如在R中用ggplot2创建散点图)。
如何在R中向DataFrame添加一列?
要在R中为数据框架添加新的列,你可以使用NewColumn <- Values` 。现在,这将有效地把你的新变量添加到你的数据集中。
如何在R中从一个数据框架向另一个数据框架添加列?
要从一个数据框架添加一个列到另一个数据框架,你可以使用A <- dfa$A`.当然,从一个数据框架向另一个数据框架添加多列也是可以实现的。
在下一节中,我们将使用readr包中的read_excel() 函数。之后,我们将使用R向创建的数据框架中添加一列。
数据实例
下面是如何在R中读取一个.xlsx文件。
# Import readxl
library(readxl)
# Read data from .xlsx file
dataf <- read_excel('./SimData/add_column.xlsx')
Code language: R (r)
在上面的代码块中,我们导入了文件add_column.xlsx。这个文件被下载到与脚本相同的目录中。我们可以使用str() 函数获得一些关于数据结构的信息。

在进入下一节之前,可能值得指出的是,我们可以从其他格式导入数据。
现在我们有了一些实例数据,可以进行练习,接下来我们将学习如何在基础R中向数据框架添加新的列。
在R(基础)中向数据框添加列的两种方法。
首先,我们将使用$-运算符,为我们的数据集分配一个新变量。其次,我们将使用括号("[ ]")来做同样的事情。
1) 使用$操作器添加一个列
下面是如何使用R中的$操作符向数据框添加新的列。
# add column to dataframe
dataf$Added_Column <- "Value"
Code language: R (r)
注意我们是如何使用操作符$在数据框架中创建新列的。我们添加到数据框架中的,是一个字符(即同一个词)。这将产生一个与行数一样长的字符向量。这里是数据框架的前6行,有添加的列。

另一方面,如果我们试图分配一个与数据框架长度不一样的向量,就会失败。我们会得到一个类似于*"错误。分配的数据`c(2, 1)`必须与现有数据兼容。"* 关于美元符号操作符的更多信息,请查看帖子"如何在R中使用$"。6个例子 - 列表和数据框架(美元符号运算符)"。

如果我们想添加一个数字序列,我们可以使用seq() 函数和length.out 参数。
# add column to dataframe
dataf$Seq_Col <- seq(1, 10, length.out = dim(dataf)[1])
Code language: R (r)

注意我们也使用了dim() 函数并选择了第一个元素(行数)来创建一个与行数相同长度的序列。当然,在现实生活中的例子中,我们可能希望在将序列作为一个新的列添加之前再多指定一些。在下一节中,我们将学习如何使用括号添加新列。
2) 使用方括号添加一列
下面是如何使用大括号("[]")将一列添加到R的数据框中。
# Adding a new column
dataf["Added_Column"] <- "Value"
Code language: R (r)
使用大括号将给我们带来与使用可能会更容易。例如,当我们有包含空格的列名时,大括号可能是最合适的方式。另外,当选择多列时,你必须使用括号而不是$。在下一节中,我们将通过使用tibble和add_column() 函数来创建一个新列。
如何使用add_column()函数在R中为数据框架添加一列
下面是如何在R中向数据框架中添加一个列。
# Append column using Tibble:
dataf <- dataf %>%
add_column(Add_Column = "Value")
Code language: R (r)
在上面的例子中,我们在数据框架的 "末端 "添加了一个新列。注意,我们可以使用dplyr来按名称删除列。这样做是为了产生下面的输出。

最后,如果我们想的话,我们可以添加一个列,并创建一个我们旧数据框架的副本。改变代码,使左边的 "dataf "变成别的东西,例如 "dataf2"。 现在,我们已经向数据框架添加了一个列,可能是时候进行其他的数据操作任务了。例如,我们现在可能想从R数据框架中删除重复的行,或者对数据框架进行转置。
例1:在另一列后面添加新的一列
如果我们想在一个特定的位置追加一个列,我们可以使用.after 参数。
# R add column after another column
dataf <- dataf %>%
add_column(Column_After = "After",
.after = "A")
Code language: R (r)

正如你可能理解的那样,这样做将在 "A "列之后添加新列。在下一个例子中,我们将在一个指定的列之前追加一个列。
例2:在另一列之前添加一列
下面是如何在数据框架中的另一列之前添加一列。
# R add column before another column
dataf <- dataf %>%
add_column(Column_Before = "Before",
.after = "Cost")
Code language: R (r)
在下一个例子中,我们将使用add_column() ,在数据框中添加一个空列。
例3:在数据框中添加一个空列
下面是我们想在R中添加一个空列的方法。
注意,我们只是添加了NA(缺失值指标)作为空列。这是输出结果,在数据框架中添加了空列。
# Empty
dataf <- dataf %>%
add_column(Empty_Column = NA) %>%
Code language: R (r)

如果我们想这样做,我们只需将NA ,例如用"''"替换。在下一个例子中,我们将在数据框架中添加一个基于其他列的列,这将创建一个字符列,可能不会被认为是空列。
例四:基于其他列添加一列
下面是如何使用R语言在数据框架中基于其他列添加一列。
# Append column conditionally
dataf <- dataf %>%
add_column(C = if_else(.$A == .$B, TRUE, FALSE))
Code language: R (r)
在上面的代码块中,我们在add_column() 函数中添加了一些东西:if_else() 函数。我们这样做是因为我们想根据另一列的值在该列中添加一个值。此外,我们使用了.$ ,这样我们就可以得到两列的比较(使用== )。如果这两列中的值相同,我们就在特定的行上添加TRUE 。这里是新添加的列。

注意,你也可以使用mutate() 函数(也来自dplyr)来根据条件添加列。关于在其他列的基础上添加列的更多信息,请参阅本教程。
在下一节中,我们将看看如何使用mutate() 函数来计算,并向数据集添加一个新的变量。
在R中用mutate()计算并添加一个新的变量到数据框中
下面是如何在R中计算和添加一个新的变量(即列)到数据框中。
# insert new column with mutate
dataf <- dataf %>%
mutate(DepressionIndex = mean(c_across(Depr1:Depr5))) %>%
head()
Code language: R (r)
请注意,在上面的示例代码中,我们是如何计算一个名为 "抑郁指数 "的新变量的,它是名为Depr1到Depr5的5个列的平均值。很明显,我们使用了mean() 函数来计算各列的平均值。注意我们还使用了c_across() 函数。这样做是为了让我们能够计算出这些列的平均值。

注意现在你已经添加了新的列,到数据框架中,你可能还想在R中用例如dplyr重命名因子水平。然而,在下一节中,我们将向数据框架中添加多列。
如何在R中向数据框架添加多列
下面是你如何使用add_column() 函数向数据框架中插入多列。
# Add multiple columns
dataf <- %>%
add_column(New_Column1 = "1st Column Added",
New_Column2 = "2nd Column Added")
Code language: R (r)
在上面的示例代码中,我们有两个向量("a "和 "b")。现在,我们使用add_column() 方法将这两列附加到数据框中。这里是数据框架的前6行,添加了列。

注意,如果你想添加多列,你只需像上面那样为你想插入的每一列添加一个参数。同样重要的是,向量的长度要与数据框架中的行数相同。否则,我们就会出现错误。注意,一个更现实的例子是,我们想取R中的绝对值(比如一列)并将其添加到一个新的列中。然而在下一个例子中,我们将从一个数据框架中添加列到另一个数据框架中。
从一个数据框架向另一个数据框架添加列
在本节中,你将学习如何从一个数据框架向另一个数据框架添加列。以下是你如何从一个数据框架向另一个数据框架添加两列的方法。
# Read data from the .xlsx files:
dataf <- read_excel('./SimData/add_column.xlsx')
dataf2 <- read_excel('./SimData/add_column2.xlsx')
# Add the columns from the second dataframe to the first
dataf3 <- cbind(dataf, dataf2[c("Anx1", "Anx2", "Anx3")])
Code language: R (r)

在上面的例子中,我们使用了cbind() 函数,同时选择了我们想要添加的列。请注意,dplyr有一个bind_cols() 函数,可以以类似的方式使用。 现在你已经把你的数据集放在一起,你可以用fastDummies包等在R中创建虚拟变量或计算描述性统计。
总结
在这篇文章中,你已经学会了如何在R中为数据框架添加一列。具体来说,你已经学会了如何使用可用的基础函数,以及Tibble的add_column()函数。此外,你还学会了如何使用dplyr中的mutate()函数来添加一列。最后,你还学会了如何添加多列,以及如何从一个数据框架向另一个数据框架添加列。
我希望你学到了有价值的东西。如果你做到了,请在你的社交媒体账户上分享本教程,在你的项目中添加链接,或者直接在下面留言!最后,欢迎大家提出建议和更正,也可以在下面留言。