变量前的美元符号
Posted
技术标签:
【中文标题】变量前的美元符号【英文标题】:Dollar sign before a variable 【发布时间】:2012-09-05 12:58:50 【问题描述】:我有这个示例代码可以从现有数据框“my_data”创建一个新数据框“new_data”。
new_data = NULL
n = 10 #this number correspond to the number of rows in my_data
conditions = c("Bas_A", "Bas_T", "Oper_A", "Oper_T") # the vector characters correspond to the target column names in my_data
for (cond in conditions)
for (i in 1:n)
new_data <- rbind(new_data, c(cond, my_data$cond[i]))
问题是 my_data$cond
(其中 cond 是一个变量,而不是列名)不被接受。
如何通过在美元符号后使用变量值来调用数据框的列?
【问题讨论】:
$
并不是真的要以编程方式使用。它旨在为交互使用提供便利。尝试改用mydata[i,cond]
。但是,查看您的代码,我认为您可能会受益于查看 reshape
函数,或者实际上是 reshape2
包......
请注意,my_data
是 data.frame
,new_data
是 matrix
。
【参考方案1】:
$
适用于列,而不是单个列对象。这是矢量化的一种形式。代码
corrections$BookDate = as.Date(corrections$BookDate, format = "%m/%d/%Y")
将corrections
表的BookDate
列的内容从字符串转换为Date
对象。它在一个操作中执行,赋值。
执行以下操作,它将解决您的问题:
new_data <- rbind(new_data, c(cond, my_data$cond))
【讨论】:
【参考方案2】:我猜你需要get()
。
例如get(x,list)
,其中list
是列表,x
是变量(可以是字符串),等于list$x
。
但是在get(x,list)
,x
可以是变量,而$
,x
不能是变量。
【讨论】:
【参考方案3】:要访问列,请使用:
my_data[ , cond]
或
my_data[[cond]]
i
th 行可以通过以下方式访问:
my_data[i, ]
将两者结合以获得所需的值:
my_data[i, cond]
或
my_data[[cond]][i]
【讨论】:
我们不能使用c$column
,c
是一个矩阵吗?我收到Error in c$col1 : $ operator is invalid for atomic vectors
...
@Mahesha999 你不能在矩阵中使用$
。
出于好奇,例如,如果我们想利用 $
提供的部分匹配支持,我们就不能使用像 '$'(data,something(cond))
这样的东西,它是我想要的一个或多个功能的组合不完全理解as.symbol
、as.expression
、quote
enquote
substitute
etc这样的?
我想将 106 列添加到数据帧中,这些列是数据帧的长度,但用 0 填充。我如何循环这个? for (i in vector) df$i
以上是关于变量前的美元符号的主要内容,如果未能解决你的问题,请参考以下文章