📌  相关文章
📜  如何根据 R DataFrame 中的其他列添加列?

📅  最后修改于: 2022-05-13 01:55:24.383000             🧑  作者: Mango

如何根据 R DataFrame 中的其他列添加列?

可以访问和修改数据框以存储新的插入和删除。数据框可以进行突变以增加其维度并存储更多数据,以及可以根据其他单元格值修改的行和列值。

在本文中,我们将看到如何使用 R 编程语言在 DataFrame 中基于其他列添加列。可以有多种方法来做同样的事情。让我们详细讨论它们。

方法一:使用transform()函数

R 中的 transform() 方法用于修改数据和执行突变。它转换提供给函数的第一个参数。也可以添加新列作为函数的第二个参数,它可以是在开始时声明的列表,也可以是在运行时使用所需的正则表达式评估进行初始化的列表。我们可以在第二个参数的左侧指定新添加的列名,并在右侧声明 if-else 表达式。 if-else 表达式由三部分组成,

  • 测试数据的条件
  • 第二部分在不满足条件时进行评估
  • 第三当它不是。

结果必须明确地放入原始数据框中,以便与结果相关。

句法:



其中 x 是新添加的列。

例子:

R
# creating a data frame
data_frame = data.frame(col1=c(1,2,3,-4),
                        col2=c(8,9,5,10),
                        col3=c(0,2,3,5))
  
# printing original data frame
print("Original Data Frame")
print (data_frame)
  
# transforming data frame
# declare col4 where if col1 is equal 
# to col3, replace by col1+col3 value, 
# otherwise by col1+col2 value
data_frame <- transform(
  data_frame, col4= ifelse(col1==col3, col1+col2, col1+col3))
  
print("Modified Data Frame")
print(data_frame)


R
# creating a data frame
data_frame = data.frame(col1=c(1,2,3,-4),
                        col2=c(8,9,5,10),
                        col3=c(0,2,3,5))
  
# printing original data frame
print("Original Data Frame")
print (data_frame)
  
# transforming data frame
# declare col4 where if col1 is equal
# to col3, replace by col1+col3 value,
# otherwise by col1+col2 value
data_frame$col4 <- with(
  data_frame, ifelse(col1+col3>5, col1+col3, col1+col2))
  
print("Modified Data Frame")
print(data_frame)


R
# creating a data frame
data_frame = data.frame(col1=c(1,2,3,-4),
                        col2=c(8,9,5,10),
                        col3=c(0,2,3,5))
  
# printing original data frame
print("Original Data Frame")
print (data_frame)
  
# transforming data frame
# declare col4 where if col1 is
# equal to col3, replace by col1+col2
# value, otherwise by col3-col2 value
data_frame$col4 <- apply(
  data_frame, 1, FUN = function(x) if(mean(x[1])>1) x[2]+x[1] else x[3]-x[2])
  
print("Modified Data Frame")
print(data_frame)


输出

[1] "Original Data Frame"
 col1 col2 col3
1    1    8    0
2    2    9    2
3    3    5    3
4   -4   10    5
[1] "Modified Data Frame"
 col1 col2 col3 col4
1    1    8    0    1
2    2    9    2   11
3    3    5    3    8
4   -4   10    5    1

方法二:使用with()方法

R 中的 with() 方法可用于计算表达式,然后转换包含在数据框中的数据。 With 是一个通用函数,它在从数据构造的局部环境中计算指定为函数第二个参数的表达式,数据在函数的第一个参数中函数。任何逻辑表达式都可以作为方法的第一个参数提供,并且在评估 with 方法的参数部分中的条件后,根据表达式的真值替换新列中的值。

句法:

例子:

电阻

# creating a data frame
data_frame = data.frame(col1=c(1,2,3,-4),
                        col2=c(8,9,5,10),
                        col3=c(0,2,3,5))
  
# printing original data frame
print("Original Data Frame")
print (data_frame)
  
# transforming data frame
# declare col4 where if col1 is equal
# to col3, replace by col1+col3 value,
# otherwise by col1+col2 value
data_frame$col4 <- with(
  data_frame, ifelse(col1+col3>5, col1+col3, col1+col2))
  
print("Modified Data Frame")
print(data_frame)

输出

[1] "Original Data Frame"
 col1 col2 col3
1    1    8    0
2    2    9    2
3    3    5    3
4   -4   10    5
[1] "Modified Data Frame"
 col1 col2 col3 col4
1    1    8    0    9
2    2    9    2   11
3    3    5    3    6
4   -4   10    5    6

方法 3:使用 apply() 方法

R 中的 apply() 方法将一个组织良好的数据框或矩阵作为输入,并给出一个向量、列表或数组作为输出。 apply() 方法主要用于避免显式使用循环结构。可以在 apply() 方法中指定任何函数。结果必须明确地放入原始数据框中,以便与结果相关。

例子:

电阻

# creating a data frame
data_frame = data.frame(col1=c(1,2,3,-4),
                        col2=c(8,9,5,10),
                        col3=c(0,2,3,5))
  
# printing original data frame
print("Original Data Frame")
print (data_frame)
  
# transforming data frame
# declare col4 where if col1 is
# equal to col3, replace by col1+col2
# value, otherwise by col3-col2 value
data_frame$col4 <- apply(
  data_frame, 1, FUN = function(x) if(mean(x[1])>1) x[2]+x[1] else x[3]-x[2])
  
print("Modified Data Frame")
print(data_frame)

输出

[1] "Original Data Frame"
  col1 col2 col3
1    1    8    0
2    2    9    2
3    3    5    3
4   -4   10    5
[1] "Modified Data Frame"
  col1 col2 col3 col4
1    1    8    0   -8
2    2    9    2   11
3    3    5    3    8
4   -4   10    5   -5