首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过一个数据帧中的分组观察值匹配另一个数据帧中的变量

如何通过一个数据帧中的分组观察值匹配另一个数据帧中的变量
EN

Stack Overflow用户
提问于 2017-03-23 07:43:30
回答 2查看 41关注 0票数 0

考虑一下:

代码语言:javascript
复制
df1 <- data.frame(
    row.names = c('Obs1','Obs2','Obs3','Obs4'),
    V1 = c(1,2,1,0),
    V2 = c(0,0,1,0),
    V3 = c(1,1,0,3))

df2 <- data.frame(
    Group = c("A", "A", "B"),
    Obs = c("Obs1", "Obs2", "Obs3"))

我希望将组成df2的每个Group的观察值与df1中的每个变量进行匹配,并返回一个描述观察值是否存在的数据帧-最终能够对df1的变量应该包含在哪些Group中进行分类。组成Group的所有观测值在df1中必须大于0,df1中的变量才能被视为Group的一部分。

代码语言:javascript
复制
output
      Group V1 V2 V3
1         A  1  0  1
2         B  1  1  0
EN

回答 2

Stack Overflow用户

发布于 2017-03-23 08:07:32

这里有一个快速的方法:

代码语言:javascript
复制
library(dplyr)
df1$Obs <- rownames(df1) # rownames are a pain, let's have a real column
# complains because of a factor in df1, but no biggie:
output <- inner_join(df1, df2) 
output %>% 
     group_by(Group) %>% 
     summarize_at(
       vars(starts_with('V')), 
       function (x) as.numeric(any(x>0))
     )

这将提供所需的输出。

票数 1
EN

Stack Overflow用户

发布于 2017-03-23 11:30:09

这是一个使用data.table连接“Obs/rn”上的两个数据集的选项,按“Group”分组,检查列中值的any是否大于0

代码语言:javascript
复制
library(data.table)
setDT(df1, keep.rownames=TRUE)[df2, on = .(rn = Obs)
    ][, lapply(.SD, function(x) +any(x > 0)) , Group, .SDcols = V1:V3]
#   Group V1 V2 V3
#1:     A  1  0  1
#2:     B  1  1  0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42964690

复制
相关文章

相似问题

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