我正在尝试选择数据框上的列,但我需要保留其列名。想象它是一列数据框。例如,这是我需要完成的:
df <- data.frame(col_a = c(1,2,3), col_b = c(5,2,8))
x <- df$col_a
colnames(x)
col_a # THIS VALUE IS WHAT I NEED
如果您向R
求向量colname
,它只会返回NULL
。是有道理的,但是如果它是数据帧的一列而不是一个简单的向量怎么办?
为什么需要这样做?我正在用ggplot2
编写一个函数,并且需要在lab
中指定用于绘制结果的列。我宁愿不要在函数上使用字符串文本来选择函数中的列,因为迭代时从数据框中选择变量要容易得多。
所以基本上function(target, values) {...
的参数都是“矢量/单列数据帧”,输入就像my_function(target = df$col_a, values = df$col_b)
,所以我可以得到colnames(target)
和{ {1}}。是吗?
有什么想法吗?谢谢!
答案 0 :(得分:2)
数据框最初是一个列表,因此您可以使用$
进行子集设置。但是,要在创建新列(列表)时保留数据框特征,则需要使用drop=F
x<- df[,"col_a",drop=F]
colnames(x)
[1] "col_a"
答案 1 :(得分:1)
data.frame是一个列表,而列是其元素。如果提取列并且也要保留其名称,则不能使用$
,如果必须同时获取列名称和列值,请使用[
df
# col_a col_b
# 1 1 5
# 2 2 2
# 3 3 8
如果通过给出列名($
)进行提取,则只有值会出现;如果按照列位置([
)进行提取,则会在该列中给出列名+值。 [
可以按数字或名称保留元素位置,但保留名称
$
df$col_a
# [1] 1 2 3
[
df[1]
# col_a
# 1 1
# 2 2
# 3 3
列表的行为(如上所述,data.frame是列表)
my_list <- list(a = 1:10, b = 1:3, c= 4)
要提取元素中的值 a
元素名称-仅提供值
my_list$a
# [1] 1 2 3 4 5 6 7 8 9 10
要提取位置 1
中元素的值元素位置-在元素中提供元素名称+值
my_list[1]
# $a
# [1] 1 2 3 4 5 6 7 8 9 10
更多帮助,在R控制台中,键入
?`[`