转换data.frame列向量?转换data.frame列向量?(Convert data.fram

2019-05-12 20:28发布

我有一个数据帧,例如:

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或其他语言将帮助!)

Answer 1:

我将试图解释这种不犯错误,但我敢说,这将吸引在评论澄清或两个。

数据帧是一个列表。 当您使用列的名称,而子集的数据帧[什么你得到一个子列表 (或子数据帧)。 如果你想实际的原子塔,你可以使用[[或有点混乱(我),你可以做aframe[,2]它返回一个载体,而不是一个子表。

因此,尝试运行此程序,也许事情会更清楚:

avector <- as.vector(aframe['a2'])
class(avector) 

avector <- aframe[['a2']]
class(avector)

avector <- aframe[,2]
class(avector)


Answer 2:

你可以使用$提取:

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

或双方括号:

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


Answer 3:

你不需要as.vector()但你需要正确索引: avector <- aframe[ , "a2"]

在另一件事情要注意的是drop=FALSE选项[

R> aframe <- data.frame(a1=c1:5, a2=6:10, a3=11:15)
R> aframe
  a1 a2 a3
1  1  6 11
2  2  7 12
3  3  8 13
4  4  9 14
5  5 10 15
R> avector <- aframe[, "a2"]
R> avector
[1]  6  7  8  9 10
R> avector <- aframe[, "a2", drop=FALSE]
R> avector
  a2
1  6
2  7
3  8
4  9
5 10
R> 


Answer 4:

现在有一个简单的方法来做到这一点使用dplyr

dplyr::pull(aframe, a2)


Answer 5:

使用“[”运营商的另一个优点是,它的工作原理都与data.frame和data.table。 因此,如果函数必须进行运行既data.frame和data.table,并且希望从中提取列作为载体,然后

data[["column_name"]] 

是最好的。



Answer 6:

你可以尝试像这个 -

as.vector(unlist(aframe$a2))


Answer 7:

如果你只是使用提取操作,将工作。 默认情况下,[]套选项drop=TRUE ,这是你想要的这里。 见?'['更多的细节。

>  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)
> aframe[,'a2']
[1]  6  7  8  9 10
> class(aframe[,'a2'])
[1] "numeric"


Answer 8:

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'])

avector<-unlist(avector)
#this will return a vector of type "integer"


Answer 9:

我用列出了它们是否有%的值%做为筛选dataframes。

我已经通过导出1列数据帧到Excel被手动创建列表我想去添加“”,每一个元件周围,粘贴到在R之前:列表< - ç这是通常(“EL1”,“EL2”,...)接着FilteredData < - 子集(数据,以%列表栏%)。

搜索计算器,而不是找到一个直观的方式向1列数据帧转换成一个列表后,我现在张贴我的第一次计算器的贡献:

# 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")


文章来源: Convert data.frame column to a vector?