如何将数据框中的值转换为对象

时间:2012-02-03 01:12:11

标签: r dataframe

对于我正在编写的函数,输出是一个数据帧。但是,如何将数据框的一列中的值分配给对象?

例如,如果我有两个向量cbind进入数据帧

>numbers<-c(33, 44, 55, 66)
>names<-c("A", "B", "C", "D")
>MYdataframe<-data.frame(cbind(names, numbers))

我会得到这个:

>MYdataframe

   names numbers
1     A      33
2     B      44
3     C      55
4     D      66

但如何将数字(例如33)分配给对象(例如A

2 个答案:

答案 0 :(得分:2)

它看起来不是一个好主意:你的函数将在全局环境或其父环境中分配变量,而不是返回一些东西。如果要返回多个值,可以将它们放在命名列表中,例如list(A=3.14, B=2.71),或者如果它们都具有相同类型的向量(如果可以将它们放在data.frame中,它们就可以)

此外,在您的示例中,cbind会将数字转换为因素:我不确定这是故意的。

但是,如果您真的坚持,可以使用assign完成此操作。

library(plyr)
d_ply( MYdataframe, "names", function(u) 
  assign( as.character(u$names[1]), u$numbers, envir=.GlobalEnv) 
) 

答案 1 :(得分:1)

如果您真的想将字符值用作名称,将数值用作数字向量的“名称”,那么这样就可以了:

names(numbers) <- names
 numbers
# A  B  C  D 
#33 44 55 66 
 numbers["A"]
#  A 
# 33 

也许你应该说出你真正想要的东西,以及为不是函数名称的对象选择名称(names是一个函数)将帮助我们把事情整理好。