gpt4 book ai didi

r - 如何在数据框的特定命名列上使用 `assign()` 或 `get()`?

转载 作者:行者123 更新时间:2023-12-03 18:19:49 26 4
gpt4 key购买 nike

有没有办法为数据框中的特定列赋值?例如。,

dat2 = data.frame(c1 = 101:149, VAR1 = 151:200)    
j = "dat2[,"VAR1"]" ## or, j = "dat2[,2]"
assign(j,1:50)

上面的方法不起作用。这也不行:
j = "dat2"
assign(get(j)[,"VAR1"],1:50)

最佳答案

让我们假设我们有一个有效的 data.frame,每个有 50 行

dat2 <- data.frame(c1 = 1:50, VAR1 = 51:100)

1 .不要使用 assignget如果你能避免它。
"dat2[,"VAR1"]"R 中无效.

您还可以从 assign 的帮助页面中注意到这一点。

assign does not dispatch assignment methods, so it cannot be used to set elements of vectors, names, attributes, etc.

Note that assignment to an attached list or data frame changes the attached copy and not the original object: see attach and with.



data.frame 的一列是列表的一个元素

您要找的是 [[<-
# assign the values from column (named element of the list) `VAR1`
j <- dat2[['VAR1']]

如果您想为 VAR1 分配新值内 dat2 ,
dat2[['VAR1']] <- 1:50

你的问题的答案......

使用 get 完全使用字符串进行操作和 assign
assign('dat2', `[[<-`(get('dat2'), 'VAR1', value = 2:51))

其他方法

数据表::集合

如果你想在 data.frame 中通过引用赋值或 data.table (仅替换现有列)然后 set来自 data.table包工作(即使使用 data.frames )
library(data.table)
set(dat2, j = 'VAR1', value = 5:54)
evalbquote
dat1 <- data.frame(x=1:5)
dat2 <- data.frame(x=2:6)



for(x in sapply(c('dat1','dat2'),as.name)) {
eval(bquote(.(x)[['VAR1']] <- 2:6))
}
eapply
或者如果您使用单独的环境
ee <- new.env()
ee$dat1 <- dat1
ee$dat2 <- dat2

# eapply returns a list, so use list2env to assign back to ee
list2env(eapply(ee, `[[<-`, 'y', value =1:5), envir = ee)

关于r - 如何在数据框的特定命名列上使用 `assign()` 或 `get()`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15670193/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com