首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中dataframe和dataframe子集的元素上匹配和使用运算符

在R中dataframe和dataframe子集的元素上匹配和使用运算符
EN

Stack Overflow用户
提问于 2021-06-04 02:42:05
回答 2查看 25关注 0票数 1

就说我有

代码语言:javascript
复制
df1$name <- c('A','B','C','D','E')
df1$val <- c(1, 2, 3, 4, 5)

代码语言:javascript
复制
df2$name <- c('A','B')
df2$val <-c(6,7)

我想要计算df2 - df1 s.t.df3将成为

代码语言:javascript
复制
df3$name <- df2$name
df3$val <- df2$val-df1$val[df1$name==df2$name]

并“匹配”这些名字,以便

代码语言:javascript
复制
df3$val<-c(6-1,7-2)

将是输出。我试着这样做,但我不能得到正确的语法,提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-04 02:44:41

我们可以使用连接

代码语言:javascript
复制
library(data.table)
setDT(df2)[df1, val := val - i.val, on = .(name)]

数据

代码语言:javascript
复制
df1 <- data.frame(name = LETTERS[1:5], val = 1:5)
df2 <- data.frame(name = LETTERS[1:2], val = 6:7)
票数 1
EN

Stack Overflow用户

发布于 2021-06-04 02:46:30

基数R:

代码语言:javascript
复制
### your starting data
df1 <- data.frame(name=c('A','B','C','D','E'), val=c(1, 2, 3, 4, 5))
df2 <- data.frame(name=c('A','B'), val=c('6','7'))

### fix strings-to-integers
df2$val <- as.integer(df2$val) # since we want to subtract

### merge and subtract
out <- merge(df1, df2, by = "name")
out$val <- out$val.y - out$val.x
out
#   name val.x val.y val
# 1    A     1     6   5
# 2    B     2     7   5

正如akrun开始的那样,这是一个合并/连接操作;有关这方面的讨论和示例,请参阅How to join (merge) data frames (inner, outer, left, right)https://stackoverflow.com/a/6188334/3358272

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67827084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档