繁体   English   中英

在R中从其他数据框中添加列

[英]In R Add Columns From a Different Dataframe

我是R新手! 我正在尝试使用一个数据框作为元数据在另一个数据框中创建列。 我正在使用apply,但没有创建列。 有想法吗?

meta <- data.frame(colname = c("a","b","c"))
frm <- data.frame(z=c(1,2,3))
frm["y"] <- 1
colnames(frm)
apply(meta, 1, function(x) {
  frm[x["colname"]] <- 1
})
colnames(frm)  #hoping for a/b/c columns now

哪个输出:

> meta <- data.frame(colname = c("a","b","c"))
> frm <- data.frame(z=c(1,2,3))
> frm["y"] <- 1
> colnames(frm)
[1] "z" "y"
> apply(meta, 1, function(x) {
+   frm[x["colname"]] <- 1
+ })
[1] 1 1 1
> colnames(frm)  #hoping for a/b/c columns now
[1] "z" "y"

更新:在这里找到答案: 如何从R Apply函数访问全局/外部作用域变量?

需要使用<<-访问应用范围之外的变量

meta <- data.frame(colname = c("a","b","c"))
frm <- data.frame(z=c(1,2,3))
frm["y"] <- 1
colnames(frm)
apply(meta, 1, function(x) {
  frm[x["colname"]] <<- 1  #DBL ARROW DID IT
})
colnames(frm)  #hoping for a/b/c columns now

“ meta”中的colnamefactor类,因此我们需要将其转换为character并使用它在“ frm”中创建新列

frm[as.character(meta[[1]])] <- 1
head(frm,2)
#  z y a b c
#1 1 1 1 1 1
#2 2 1 1 1 1

如果我们需要遍历“元”名称

for(cn in as.character(meta$colname)) frm[[cn]] <- 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM