R语言 合并不等长的向量或数据帧
在这篇文章中,我们将看到如何在R编程语言中把不等长的向量或数据帧合并成一个数据帧。
使用的函数 。
- c(“Value1”, “Value2”, “Value3”) : 这是一个通用函数,它将其参数结合起来。默认的方法是将其参数(Value)组合成一个矢量。
- length(vector): 获取或设置向量、因子或任何其他R对象的长度。
- max(…): 返回它的参数中所有数值的最大值。
- rep(x, ...): 复制x中的值,第二个参数可以是times、length()、length.out、each中的任何一个。
分步实现
第1步: 使用c()函数准备数据框架的向量。这里我们把学生数据和 Rollno , Name , Marks, 和 Age 作为一个向量。正如你在下面看到的,我们只有前三个学生的姓名和年龄。我们没有其他三人的姓名和年龄数据。同时,我们也没有最后一个学生的分数。
Rollno <- c("5", "6", "7", "8", "9", "10")
Name <- c("John Doe", "Jane Doe", "Bill Gates")
Marks <- c("80", "75", "95", "96", "70", "86")
Age <- c("13", "13", "14")
第2步: 你可以看到上面的数据,Rollno, Name, Marks, 和Age的长度分别是6, 3, 5, 和3。现在,通过使用 max() 函数。在max()函数中,我们通过 length() 函数获得所有向量的长度。我们将得到我们创建的所有向量的最大长度,并将这个长度存储到 maxlength 变量中。同时,为测试目的,通过打印来检查长度。
Rollno <- c("5", "6", "7", "8", "9", "10") # length = 6
Name <- c("John Doe","Jane Doe", "Bill Gates") # length = 3
Marks <- c("80", "75", "95", "96", "70") # length = 5
Age <- c("13", "13", "14") # length = 3
maxlength = max(length(Rollno), length(Name),
length(Marks), length(Age))
print(maxlength)
输出
6
第3步: 姓名和年龄矢量的长度为3,分数的长度为5。 因此,我们应该用 NA 值替换剩余的黑点。为此,我们将使用 rep() 函数,其中第一个参数是NA,这里我们使用剩余黑点的长度作为第二个参数。在用NA填充黑点之后,我们将用同样的 c ( ) 函数更新向量。
Rollno <- c("5", "6", "7", "8", "9", "10")
Name <- c("John Doe","Jane Doe", "Bill Gates")
Marks <- c("80", "75", "95", "96", "70")
Age <- c("13", "13", "14")
maxlength = max(length(Rollno), length(Name),
length(Marks), length(Age))
Rollno = c(Rollno, rep(NA, maxlength - length(Rollno)))
# fill last three spaces by NA.
Name = c(Name, rep(NA, maxlength - length(Name)))
# fill last one spaces by NA.
Marks = c(Marks, rep(NA, maxlength - length(Marks)))
# fill last three spaces by NA.
Age = c(Age, rep(NA, maxlength - length(Age)))
第4步: 现在,我们将使用 data.frame() 函数创建一个更新向量的DataFrame,并将其存储在 studentdata 变量中。
Rollno <- c("5", "6", "7", "8", "9", "10")
Name <- c("John Doe","Jane Doe", "Bill Gates")
Marks <- c("80", "75", "95", "96", "70")
Age <- c("13", "13", "14")
maxlength = max(length(Rollno), length(Name),
length(Marks), length(Age))
Rollno = c(Rollno, rep(NA, maxlength - length(Rollno)))
Name = c(Name, rep(NA, maxlength - length(Name)))
Marks = c(Marks, rep(NA, maxlength - length(Marks)))
Age = c(Age, rep(NA, maxlength - length(Age)))
studentdata <- data.frame(Rollno, Name, Marks, Age)
display(studentdata)
输出
‘studentdata’ 数据框架