我有一个数据框架,如:

a1 = c(1, 2, 3, 4, 5)
a2 = c(6, 7, 8, 9, 10)
a3 = c(11, 12, 13, 14, 15)
aframe = data.frame(a1, a2, a3)

我试着用下面的方法将其中一列转换为一个向量,但它不起作用:

avector <- as.vector(aframe['a2'])
class(avector) 
[1] "data.frame"

这是我能想到的唯一解决方案,但我认为一定有更好的方法:

class(aframe['a2']) 
[1] "data.frame"
avector = c()
for(atmp in aframe['a2']) { avector <- atmp }
class(avector)
[1] "numeric"

注:以上词汇可能不正确,请指正。我还在学习r的世界,此外,任何关于这里发生的事情的解释都是非常感谢的(例如,与Python或其他语言有关会有帮助!)


当前回答

你可以使用$ extraction:

class(aframe$a1)
[1] "numeric"

或者双方括号:

class(aframe[["a1"]])
[1] "numeric"

其他回答

使用'[[]'操作符的另一个优点是它同时适用于data.frame和data.table。如果函数必须同时为data。frame和data运行。表,然后你想从中提取一列作为向量

data[["column_name"]] 

是最好的。

现在有一种使用dplyr的简单方法。

dplyr::pull(aframe, a2)
as.vector(unlist(aframe['a2']))

你可以使用$ extraction:

class(aframe$a1)
[1] "numeric"

或者双方括号:

class(aframe[["a1"]])
[1] "numeric"

我使用列表来过滤数据帧,根据它们在% a列表中是否有值%。

我已经手动创建了一个1列的数据帧,导出到Excel中,我将添加“”,在每个元素周围,粘贴到R: list <- c(“el1”,“el2”,…),通常后面跟着FilteredData <-子集(数据,列%在% list)。

在搜索stackoverflow后,没有找到一个直观的方法将1列数据帧转换为列表,我现在发布我的第一个stackoverflow贡献:

# assuming you have a 1 column dataframe called "df"
list <- c()
for(i in 1:nrow(df)){
  list <- append(list, df[i,1])
}
View(list)
# This list is not a dataframe, it is a list of values
# You can filter a dataframe using "subset([Data], [Column] %in% list")