R:在语句中分配dataframe元素

时间:2016-01-24 05:44:33

标签: r dataframe

我想分配数据框的元素,但不想每次都输入类似controller-as的内容,因为数据框的名称可能很长。另外,我不想使用df$x,所以我转向attach声明。但是,我无法让它工作(请参阅以下代码):

with

我在> df <- data.frame(x=1:5,y=5:1) > with(df, {x[1]<-10 + x[1]}) [1] 10 > df$x [1] 1 2 3 4 5 &#34;声明&#34;中分配了10 df$x的第一个元素,内部看起来很好。但是,一旦在with之外,with似乎没有改变。

我的问题是:如何在df$x(或with)内使其发挥作用?如果这是不可能的,除了within之外还有其他选择吗?

3 个答案:

答案 0 :(得分:2)

如前所述......使用data.table。

library(data.table)

只要您阅读data.frame,就将其转换为data.table

dt <- data.table(df)

然后就是:

dt[1,x:=10]

答案 1 :(得分:1)

within是您正在寻找的。

within(df, {
  x[1] <- 10
})

   x y
1 10 5
2  2 4
3  3 3
4  4 2
5  5 1

答案 2 :(得分:1)

with返回已计算的expr的值,在本例中为x的修改值。因此,当您返回修改后的对象时,需要使用within

我认为你所面临的问题是你没有分配任何东西

df <- data.frame(x=1:5,y=5:1)
within(df, {x[1] <- 10})

正在返回

x y
10 5
2 4
3 3
4 2
5 1

然后df返回

x y
1 5
2 4
3 3
4 2
5 1

所以你需要像

这样的东西
df <- within(df, {x[1] <- 10})

这对你的长数据框架名称问题没有多大帮助。那怎么样呢?

df[1, "x"] <- 10

只键入一次或暂时将数据框重命名为更短的内容?