如何使用df的动态变量名更改data.frame的一部分?

时间:2015-03-09 21:28:05

标签: r

我有一个数据框“Tester”,如下所示

Tester <- data.frame(A=c(1,3,5,7), B=c(2,4,6,8), C=0)
#A  B  C
#1  2  0
#3  4  0
#5  6  0
#7  8  0

我想更改C列中的前两个元素,因此它使用动态确定的变量名称(存储在字符串中)读取c(1,1,0,0)。

因为我在几个类似的变量名称上循环这个,所以我使用字符串作为变量名进行操作,并且我已经能够使用get()和assign()来完成所有操作。

因为变量名称存储在字符串中,

Tester[1:2,3] <- 1

是不可能的。

当我尝试使用getassign时,R会抛出“错误的维数”错误

assign(Tester[1:2,3], 1)
or
assign(get("Tester")[1:2,3], 1)

当我尝试双方括号时,它会抛出“不正确的下标数量。”

我在这里不知所措......任何帮助?

2 个答案:

答案 0 :(得分:1)

这是一个hacky解决方法

Tester <- data.frame(A=c(1,3,5,7), B=c(2,4,6,8), C=0)

dfname <- "Tester"
colname <- "C"

df <- get(dfname)
df[1:2, colname] <- 1
assign(dfname, df)

get(dfname)

答案 1 :(得分:0)

你的意思是这样的:

> dfName <- "mydf"
> mydf <- data.frame(A = c(1,3,5,7), B = c(2,4,6,8), C = c(0,0,0,0))
> mydf
  A B C
1 1 2 0
2 3 4 0
3 5 6 0
4 7 8 0
> 
> mydf <- get(dfName)
> mydf$C[1:2] <-1
> get(dfName)
  A B C
1 1 2 1
2 3 4 1
3 5 6 0
4 7 8 0

请注意,一旦找到df,只需将其保存到您选择的变量中,然后打印即可。