如何用Tibble和dplyr在R中向数据框架添加一列

3,213 阅读6分钟

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

how to add a column to a dataframe in r

如何将列添加到数据框架中

注意,当用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"列,你可以这样做:dataf-操作器。例如,要添加 "NewColumn "列,你可以这样做:`datafNewColumn <- Values` 。现在,这将有效地把你的新变量添加到你的数据集中。

如何在R中从一个数据框架向另一个数据框架添加列?

要从一个数据框架添加一个列到另一个数据框架,你可以使用操作符。例如,如果你想将名为"A"的列从名为"dfa"的数据框架添加到名为"dfb"的数据框架,你可以运行以下代码。dfb操作符。例如,如果你想将名为 "A "的列从名为 "dfa "的数据框架添加到名为 "dfb "的数据框架,你可以运行以下代码。`dfbA <- 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行,有添加的列。

Column added to the r dataframe

另一方面,如果我们试图分配一个与数据框架长度不一样的向量,就会失败。我们会得到一个类似于*"错误。分配的数据`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)

new column added to the dataframe in 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来按名称删除列。这样做是为了产生下面的输出。

Column added to the dataframe with Tibble

最后,如果我们想的话,我们可以添加一个列,并创建一个我们旧数据框架的副本。改变代码,使左边的 "dataf "变成别的东西,例如 "dataf2"。 现在,我们已经向数据框架添加了一个列,可能是时候进行其他的数据操作任务了。例如,我们现在可能想从R数据框架中删除重复的行,或者对数据框架进行转置

例1:在另一列后面添加新的一列

如果我们想在一个特定的位置追加一个列,我们可以使用.after 参数。

# R add column after another column
dataf <- dataf %>%
  add_column(Column_After = "After",
             .after = "A")

Code language: R (r)

Dataframe with column added after another column in 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)

empty column added to the dataframe in 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 。这里是新添加的列。

column added based on condition (ie on other column)

注意,你也可以使用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() 函数。这样做是为了让我们能够计算出这些列的平均值。

added new variable to data in R

注意现在你已经添加了新的列,到数据框架中,你可能还想在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行,添加了列。

multiple columns added to the dataframe

注意,如果你想添加多列,你只需像上面那样为你想插入的每一列添加一个参数。同样重要的是,向量的长度要与数据框架中的行数相同。否则,我们就会出现错误。注意,一个更现实的例子是,我们想取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)

added columns from another dataframe

在上面的例子中,我们使用了cbind() 函数,同时选择了我们想要添加的列。请注意,dplyr有一个bind_cols() 函数,可以以类似的方式使用。 现在你已经把你的数据集放在一起,你可以用fastDummies包等在R中创建虚拟变量或计算描述性统计

总结

在这篇文章中,你已经学会了如何在R中为数据框架添加一列。具体来说,你已经学会了如何使用可用的基础函数,以及Tibble的add_column()函数。此外,你还学会了如何使用dplyr中的mutate()函数来添加一列。最后,你还学会了如何添加多列,以及如何从一个数据框架向另一个数据框架添加列。

我希望你学到了有价值的东西。如果你做到了,请在你的社交媒体账户上分享本教程,在你的项目中添加链接,或者直接在下面留言!最后,欢迎大家提出建议和更正,也可以在下面留言。