联合几行数据框
Uniting several rows of data frame
有没有办法将数据框的多行与多列结合起来?
我有来自不同动物器官的数据 - 我想对比个体的器官。
一排应该只包含一个人的测量值,但来自所有采样器官(列)。
任何的想法?我试过 melt 命令没成功。
这是我的一些数据:
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")
你使用 melt 的方法是正确的,你只需要确定你使用的是哪个 melt 函数 data.table::melt 或 reshape2::melt,并且有很多方法可以看看答案 here.
这是一对夫妇的数据:
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
我找到了解决方案,虽然它看起来有点愚蠢,因为平均值不是计算实际算术平均值:
my_data <- my_data[,-c(2,3)] %>%
pivot_longer(cols = brain:muscle)
acast(my_data, ID ~ name, mean,na.rm=T)
然后取原来的值。
有没有办法将数据框的多行与多列结合起来?
我有来自不同动物器官的数据 - 我想对比个体的器官。 一排应该只包含一个人的测量值,但来自所有采样器官(列)。 任何的想法?我试过 melt 命令没成功。
这是我的一些数据:
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")
你使用 melt 的方法是正确的,你只需要确定你使用的是哪个 melt 函数 data.table::melt 或 reshape2::melt,并且有很多方法可以看看答案 here.
这是一对夫妇的数据:
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
我找到了解决方案,虽然它看起来有点愚蠢,因为平均值不是计算实际算术平均值:
my_data <- my_data[,-c(2,3)] %>%
pivot_longer(cols = brain:muscle)
acast(my_data, ID ~ name, mean,na.rm=T)
然后取原来的值。