这听起来很琐碎,但我在查找数据框的列名(带有1列)时遇到了一个问题
> a <- data.frame(x = c(1,2,3,4,5), y = c("a", "a","c","d","r"))
> a
x y
1 1 a
2 2 a
3 3 c
4 4 d
5 5 r
> colnames(a)
[1] "x" "y"
> names(a)
[1] "x" "y"
> a1 <- a[,1]
> class(a1)
[1] "numeric"
> a1
[1] 1 2 3 4 5
> a1 <- as.data.frame(a[,1])
> a1
a[, 1]
1 1
2 2
3 3
4 4
5 5
> colnames(a1)
[1] "a[, 1]"
> names(a1)
[1] "a[, 1]"
>
我正在从数据帧“ a”中选择1列,当我查询a1的列名时,我希望输出为“ x”。对此有帮助。谢谢
最佳答案
# Data
a <- data.frame(x = c(1,2,3,4,5), y = c("a", "a","c","d","r"), z = 1:5)
class(a)
#[1] "data.frame"
# Subset a
a1 <- a[,1]
class(a1)
is.vector(a1)
is.data.frame(a1)
这是一个称为a1(不是x)的数字向量。查看
drop
中的?"["
参数:默认值为drop =TRUE
。由于只有一列,因此a [,1]被强制为数字矢量,并且列名丢失。随后将向量传递给data.frame
时,列将采用传递给它的向量的名称(如果已命名),因此names(data.frame(a1))
# [1] "a1"
因此,在进行子集设置时请使用
drop = FALSE
以避免减少-a1将是一列data.frame(a1 <- a[,1, drop = FALSE])
# x
#1 1
#2 2
#...
关于r - r中数据框的同名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23156832/