如何根据 R DataFrame 中的其他列添加列?
可以访问和修改数据框以存储新的插入和删除。数据框可以进行突变以增加其维度并存储更多数据,以及可以根据其他单元格值修改的行和列值。
在本文中,我们将看到如何使用 R 编程语言在 DataFrame 中基于其他列添加列。可以有多种方法来做同样的事情。让我们详细讨论它们。
方法一:使用transform()函数
R 中的 transform() 方法用于修改数据和执行突变。它转换提供给函数的第一个参数。也可以添加新列作为函数的第二个参数,它可以是在开始时声明的列表,也可以是在运行时使用所需的正则表达式评估进行初始化的列表。我们可以在第二个参数的左侧指定新添加的列名,并在右侧声明 if-else 表达式。 if-else 表达式由三部分组成,
- 测试数据的条件
- 第二部分在不满足条件时进行评估
- 第三当它不是。
结果必须明确地放入原始数据框中,以便与结果相关。
句法:
transform(dataframe,x=c(..))
其中 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 方法的参数部分中的条件后,根据表达式的真值替换新列中的值。
句法:
with(data, expr, …)
例子:
电阻
# 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() 方法中指定任何函数。结果必须明确地放入原始数据框中,以便与结果相关。
Syntax: apply(X, margin, FUN)
Parameter :
- x: a data frame or a matrix
- margin: take a value or range between 1 and 2 to define where to apply the function:
- margin=1 : the manipulation is performed on rows
- margin=2 : the manipulation is performed on columns
- margin=c(1,2) : the manipulation is performed on both rows and columns
- FUN: the function to apply where in built functions like mean, median, sum, min, max and even user-defined functions can be applied
例子:
电阻
# 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