R语言 用特定的列名将列表转换为数据框架
一个列表包含不同类型的对象作为其组成部分。这些组件可能属于不同的数据类型或不同的维度。矢量可以是列表中有用的组件,可以很容易地映射为数据框架的行或列。数据框架中的每一列都用一个唯一的名字来引用,这个名字可以等同于列表的组件名称,也可以明确地分配。在这篇文章中,我们将讨论如何在R编程语言中用特定的列名将一个列表转换为数据框架。
以行的形式进行列表数据的转换
R语言中的 do.call() 方法从一个名字或一个函数以及在函数调用过程中要传递的参数列表中构造并执行一个函数调用。
语法: do.call (fun , args)
参数:
- fun – 要执行的函数名称
- args – 函数调用的参数列表
rbind()方法在这个函数调用中被用作fun,它将传递的列表元素绑定为数据框架的行。这些行是根据列表中的相应组件来命名的。因此,do.call()方法的参数是列表对象。列名可以使用R中的colnames()方法进行修改,该方法将列名分配给指定的向量。如果列名向量的长度较小,NA将被分配为相应的列名。列名在原始数据框架对象中被保留下来。数据框架中的列数相当于列表中每个组件的大小。
do.call ( rbind , list)
as.data.frame()方法用于将对象映射为一个由行和列组成的数据框架。
# declaring a list object
lst_obj <- list(row1 = 1 : 5,
row2 = LETTERS[1 : 5],
row3 = FALSE)
print ("Original List")
print (lst_obj)
# binding columns together
df <- do.call(rbind, lst_obj)
print ("Original dataframe")
# converting to a dataframe
data_frame <- as.data.frame(df)
print (data_frame)
print ("Modified dataframe")
colnames(data_frame) <- c(
"ColA", "ColB", "ColC", "ColD", "ColE")
print (data_frame)
输出:
[1] "Original List"
col1
[1] 1 2 3 4 5col2
[1] "A" "B" "C" "D" "E"
$col3
[1] FALSE
[1] "Original dataframe"
V1 V2 V3 V4 V5
row1 1 2 3 4 5
row2 A B C D E
row3 FALSE FALSE FALSE FALSE FALSE
[1] "Modified dataframe"
ColA ColB ColC ColD ColE
row1 1 2 3 4 5
row2 A B C D E
row3 FALSE FALSE FALSE FALSE FALSE
列名也可以根据列表对象内部元素的命名分配给数据框架。即使任何一个向量组件被分配了名字,命名也会被分配。
# declaring a list object
lst_obj <- list("Row 1" = c(col1 = 'a', col2 = 'b',
col3 = 'c'),
"Row 2" = c(col1 = 'd', col2 = 'e',
col3 = 'f'))
print ("Original List")
print (lst_obj)
# binding columns together
df <- do.call(rbind, lst_obj)
print ("dataframe")
# converting to a dataframe
data_frame <- as.data.frame(df)
print (data_frame)
输出:
[1] "Original List"
`Row 1`
col1 col2 col3
"a" "b" "c"`Row 2`
col1 col2 col3
"d" "e" "f"
[1] "dataframe"
col1 col2 col3
Row 1 a b c
Row 2 d e f
用列形式的列表数据进行转换
可以用cbind()和do.call()方法来完成。
do.call ( cbind , list)
以下属性被维护。
- 分配给列表组件的名称成为列名,可以使用colnames()方法修改。
- 行的总数与组件的长度相等。
- 行名被映射到行号上。
代码
# declaring a list object
lst_obj <- list(col1 = 1 : 5,
col2 = LETTERS[1 : 5],
col3 = FALSE)
print ("Original List")
print (lst_obj)
# binding columns together
df <- do.call(cbind, lst_obj)
print ("dataframe")
# converting to a dataframe
as.data.frame(df)
输出
[1] "Original List"
col1
[1] 1 2 3 4 5col2
[1] "A" "B" "C" "D" "E"
$col3
[1] FALSE
[1] "dataframe"
col1 col2 col3
1 1 A FALSE
2 2 B FALSE
3 3 C FALSE
4 4 D FALSE
5 5 E FALSE