通过字符和数据动态生成变量名称[R]

时间:2015-03-11 19:38:41

标签: r variables

我是否可以通过动态组合数据集中的字符和值来生成R中的变量名称,并将新变量存储到矢量中。例如,我们将数据集设为

col1  col2
 8     4
 3     6
 4     3
 5     5

我希望col1可以是新变量名的一部分,col2是新变量的值。例如,我希望我能得到以下结果,

x8 = 4, x3 = 6, x4 = 3, x5 = 5

其中变量名称部分中的数字8,3,4,5来自col1,而“x”是我可以选择的字符。我也希望我可以自动将变量名存储到矢量中。感谢。

2 个答案:

答案 0 :(得分:2)

不要自动创建变量名称。这是一件坏事。如果您的数据项是相关的,则希望将它们存储在单个对象中。从长远来看,你可能会更幸福。例如,从df开始:

n=list()
n[paste0("x",df$col1)]=df$col2

现在您可以通过n$x3获取价值:

 > n$x3
 [1] 6

列表中的条目可以通过names获得:

 > names(n)
 [1] "x8" "x3" "x4" "x5"

这里的奖励是你没有用很多变量弄乱你的空间而你必须单独处理你的事物名称列表创建。如果要对所有这些值执行某些操作,只需循环遍历列表中的条目即可。例如,哪些超过4?

> for(nm in names(n)){if(n[nm]>4){print(nm)}}
[1] "x3"
[1] "x5"

有更好的方法可以做到这一点,但这应该让你开始。

答案 1 :(得分:0)

不太清楚你在寻找什么...但是这里有一个镜头

df <- read.table(textConnection("col1  col2
 8     4
 3     6
 4     3
 5     5"), header=T)
> df
  col1 col2
1    8    4
2    3    6
3    4    3
4    5    5
> paste0("x", df$col1)
[1] "x8" "x3" "x4" "x5"
a <- df$col2
names(a) <- paste0("x", df$col1)
> a
x8 x3 x4 x5 
 4  6  3  5