子集字符向量以在data.frame中创建列

时间:2015-04-12 03:15:38

标签: r

我正在尝试创建一个新的data.frame对象,该对象由旧data.frame的列组成,每行设置为给定值(对于此示例,我将使用7)。但是,我遇到了问题,命名新data.frame对象的变量。这就是我想要做的事情:

my.df <- data.frame(x = 1:3, y123=4:6)

my.df
  x y123
1 1    4
2 2    5
3 3    6

然后当我尝试将这些变量名称分配给新的data.frame

  the.names <- names(my.df)

for(i in 1:length(the.names)){
  data.frame(
    the.names[i] = 7
  )
}

但这会引发意外=,)和}的错误。这通常会让我怀疑是一个错字,但我已经多次审查了这一点并且找不到任何东西。有任何想法吗?

2 个答案:

答案 0 :(得分:1)

最简单的方法可能是完全复制旧的data.frame,然后将每个单元格分配给您的新值:

df <- data.frame(x=1:3,y123=4:6);
df2 <- df;
df2[] <- 7;
df2;
##   x y123
## 1 7    7
## 2 7    7
## 3 7    7

如果您只想在新的data.frame中使用一行,则可以在复制时仅索引顶行:

df <- data.frame(x=1:3,y123=4:6);
df2 <- df[1,];
df2[] <- 7;
df2;
##   x y123
## 1 7    7

修改:以下是将每列设置为不同值的方法:

df <- data.frame(x=1:3,y123=4:6);
df2 <- df;
df2[] <- rep(c(7,31),each=nrow(df2));
df2;
##   x y123
## 1 7   31
## 2 7   31
## 3 7   31

答案 1 :(得分:0)

您可以使用within

> within(my.df, {
+     assign(the.names[1], 0)
+     assign(the.names[2], 1)
+ })
  x y123
1 0    1
2 0    1
3 0    1