繁体   English   中英

R-函数中的交叉引用变量

[英]R - cross-referencing variables in functions

我有一个由

> A <- c(0,1,2,3,0,1)
> B <-c('NA','NA','NA','NA','NA','NA')
> C <- c('Fnord', 'Fnord','Applebees','Pumpkin','Applebees','Pumpkin')
> db <- data.frame(A,B,C)

具有db $ C [j] = db $ C [k] for j!= k的属性。 也就是说,每行与一个完全不同的行共享一个C值-每行具有唯一的“ C伙伴”。 我想创建一个函数,用其“ C-partner”的db $ A值替换db $ B。 理想情况下,最终结果应类似于

> db
    A    B    C
1   0    1    Fnord
2   1    0    Fnord
3   2    0    Applebees
4   3    1    Pumpkin
5   0    2    Applebees
6   1    3    Pumpkin
.
.
.

到目前为止,我对此的尝试都失败了。 抱歉,如果以前没有回答过-我的搜索结果没有给我答案。

我尝试过的一个例子是

db$D <- sapply(db$C, FUN=function(x) {return(sum(db$A %in% subset(db, C="x")))})
db$B <- db$D - db$A

却没有给我想要的 我不确定我要去哪里。

编辑:为清楚起见添加了一些代码。

这将创建一个与您的描述匹配的数据框:

db <- rbind(db, structure(list(A = 2:3, B = c(0L, 3L), C = structure(2:3, .Label = c("Applebees", 
"Fnord", "Fnord2", "Pumpkin"), class = "factor")), .Names = c("A", 
"B", "C"), row.names = c("7", "8"), class = "data.frame") )

# Then just merge with itself and remove the cases where the C values are '=='
mdb <- merge(db,db, by="A")
mdb[mdb$C.x != mdb$C.y, c('A', 'C.y', 'C.x')]
   A       C.y       C.x
2  0 Applebees     Fnord
3  0     Fnord Applebees
6  1   Pumpkin     Fnord
7  1     Fnord   Pumpkin
10 2     Fnord Applebees
11 2 Applebees     Fnord
14 3    Fnord2   Pumpkin
15 3   Pumpkin    Fnord2

暂无
暂无

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

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