在变量前加美元符号是什么意思?

30

我有这段示例代码,用于从现有数据帧 '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是一个变量而不是列名)无法被接受。

如何通过在美元符号后面使用变量值调用数据框的列?


11
$符号并不是为了程序化使用而设计的,它更适合用于交互式操作。建议尝试使用mydata[i,cond]代替。但是,根据您的代码,可能需要查看reshape函数或者reshape2包。 - James
请注意,my_data 是一个 data.frame,而 new_data 是一个 matrix - GSee
3个回答

42

要访问列,请使用:

my_data[ , cond]
或者
my_data[[cond]]

可以使用以下代码访问第 i 行:

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
@Mahesha999,你不能在矩阵中使用 $ - Sven Hohenstein
出于好奇,例如我们想利用 $ 支持的部分匹配,我们是否可以使用类似 '$'(data,something(cond)) 的东西,其中 something 是一个或多个函数的组合,我并不完全理解这些函数,如 as.symbolas.expressionquoteenquotesubstitute 等等? - moodymudskipper
我想向一个数据框中添加106列,这些列的长度与数据框相同,但填充为0。我该如何循环执行此操作? for (i in vector) { df$i <- vector(,lengthdf) } ??? - Emil Krabbe

5
我猜你需要使用get()
例如,get(x,list),其中list是列表,x是变量(可以是字符串),等于list$x
但在get(x,list)中,x可以是一个变量,而在使用$时,x不能是一个变量。

1

$ 作用于列,而非单个列对象。这是一种向量化的形式。

corrections$BookDate = as.Date(corrections$BookDate, format = "%m/%d/%Y")

corrections 表格中的 BookDate 列内容从字符串转换为 Date 对象。它可以通过一次操作完成赋值。
按照以下步骤进行操作,即可解决问题:
new_data <- rbind(new_data, c(cond, my_data$cond))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接