首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并多行数据帧

合并多行数据帧
EN

Stack Overflow用户
提问于 2021-11-03 13:37:06
回答 2查看 52关注 0票数 0

有没有一种方法可以将数据帧的几行与多列结合起来?

我有来自不同动物器官的数据--我想对比个人的器官。一行应该只包含单个但来自所有采样器官(列)的测量值。有什么想法吗?我尝试了熔化命令不能管理它。

以下是我的一些数据:

代码语言:javascript
复制
structure(list(ID = c("BB1", "BB1", "BB1"), ID.organ = c("BB1-B", 
"BB1-L", "BB1-M"), d15NAIR = c(6.244803447, 5.263374719, 6.28820367
), brain = c(-31.00047084, NA, NA), eyes = c(NA_real_, NA_real_, 
NA_real_), liver = c(NA, -30.8483728, NA), muscle = c(NA, NA, 
-29.67755736)), row.names = c(NA, 3L), class = "data.frame")
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-09 18:22:47

我找到了解决方案,尽管它看起来有点愚蠢,因为均值不是计算实际算术平均值:

代码语言:javascript
复制
my_data <- my_data[,-c(2,3)] %>%
  pivot_longer(cols = brain:muscle) 
    
acast(my_data, ID ~ name, mean,na.rm=T)

然后取原始值。

票数 0
EN

Stack Overflow用户

发布于 2021-11-04 10:13:59

使用melt是正确的,您只需要确定您使用的是data.table::melt还是reshape2::melt函数,有很多方法可以做到这一点,请看答案here

下面是一些你的数据:

代码语言:javascript
复制
mydata <- structure(list(ID = c("BB1", "BB1", "BB1"), 
                          ID.organ = c("BB1-B",  "BB1-L", "BB1-M"), 
                          d15NAIR = c(6.244803447, 5.263374719, 6.28820367),
                          brain = c(-31.00047084, NA, NA), 
                          eyes = c(NA_real_, NA_real_, NA_real_),
                          liver = c(NA, -30.8483728, NA), 
                          muscle = c(NA, NA, -29.67755736)), 
                     row.names = c(NA, 3L), 
                     class = "data.frame")

library(reshape2)
melt(mydata, id.vars=c("ID", "ID.organ",  "d15NAIR"), na.rm = TRUE)

library(tidyr)
gather(mydata, organ, value, c("brain", "liver", "muscle"), na.rm = TRUE)

#     ID ID.organ  d15NAIR variable     value
# 1  BB1    BB1-B 6.244803    brain -31.00047
# 8  BB1    BB1-L 5.263375    liver -30.84837
# 12 BB1    BB1-M 6.288204   muscle -29.67756
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69825857

复制
相关文章

相似问题

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