重塑 R 中的数据,转换函数参数
Reshape data in R, cast function arguments
我有一个名为 "wc" 的数据框,格式如下
PARENT_MOL_CHEMBL_ID TARGET_TYPE
C10 ABL
C10 EGFR
C939 TP53
我想按以下格式重塑矩阵:
期望的输出
PARENT_MOL_CHEMBL_ID ABL EGFR TP53
C10 1 1 0
C939 0 0 1
我已经阅读了 R 中的 reshape 包。
我试过调用 cast 函数,但它不起作用。
cast(wc,PARENT_MOL_CHEMBL_ID~TARGET_TYPE, value = "TARGET_TYPE")
我不明白我应该在值部分使用什么参数。请指导我如何将 data.frame 转换为所需的形状。
如果有更好的替代方案,如 plyr 函数,请也突出显示替代方案。谢谢
library(tidyverse)
# create an example dataset
wc <- data.frame(PARENT_MOL_CHEMBL_ID = c("C10", "C10", "C939"), TARGET_TYPE = c("ABL", "EGFR", "TP53"))
wc <- wc %>%
# create an auxiliary variable
mutate(AUX = 1) %>%
# spread the data from long to wide and fill the empty cells with 0
# EDIT based on Sotos comment. Thanks! :)
spread(TARGET_TYPE, AUX, fill = 0)
结果是:
PARENT_MOL_CHEMBL_ID ABL EGFR TP53
C10 1 1 0
C939 0 0 1
更多信息:http://www.cookbook-r.com/Manipulating_data/Converting_data_between_wide_and_long_format/
OP 就 reshape
包的 cast()
函数的参数寻求帮助。但是,reshape
包已被同一包作者的 reshape2
包取代。根据包说明,reshape2
包是
A Reboot of the Reshape Package
使用reshape2
,可以用
产生想要的结果
reshape2::dcast(wc, PARENT_MOL_CHEMBL_ID ~ TARGET_TYPE, fun.aggregate = length,
value.var = "TARGET_TYPE")
# PARENT_MOL_CHEMBL_ID ABL EGFR TP53
#1 C10 1 1 0
#2 C939 0 0 1
顺便说一句:data.table
包也实现了(并增强了)dcast()
。因此,可以用
产生相同的结果
data.table::dcast(wc, PARENT_MOL_CHEMBL_ID ~ TARGET_TYPE, fun.aggregate = length,
value.var = "TARGET_TYPE")
其他列
OP 数据框中的其他列应与 spread 或 wide 数据一起显示。不幸的是,OP 没有提供特定的示例数据,因此我们必须考虑两个用例。
案例 1:其他列与 id 列一起使用
数据可能看起来像
wc
# PARENT_MOL_CHEMBL_ID TARGET_TYPE extra_col1
#1 C10 ABL a
#2 C10 EGFR a
#3 C939 TP53 b
注意extra_col1
中的值符合PARENT_MOL_CHEMBL_ID
.
这是一个简单的例子,因为 dcast()
中的公式接受 ...
,它表示公式中未使用的所有其他变量:
reshape2::dcast(wc, ... ~ TARGET_TYPE, fun.aggregate = length,
value.var = "TARGET_TYPE")
# PARENT_MOL_CHEMBL_ID extra_col1 ABL EGFR TP53
#1 C10 a 1 1 0
#2 C939 b 0 0 1
结果 data.frame 包含所有其他列。
案例 2:其他列不要与 id 列一起使用
现在,添加了另一列:
wc
# PARENT_MOL_CHEMBL_ID TARGET_TYPE extra_col1 extra_col2
#1 C10 ABL a 1
#2 C10 EGFR a 2
#3 C939 TP53 b 3
请注意 extra_col2
对 C10
有两个不同的值。这将导致简单方法失败。因此,必须实施两步法:首先重塑,然后与原始数据框连接。 data.table
包用于两个步骤,现在:
library(data.table)
# reshape from long to wide, result has only one row per id column
wide <- dcast(setDT(wc), PARENT_MOL_CHEMBL_ID ~ TARGET_TYPE, fun.aggregate = length,
value.var = "TARGET_TYPE")
# right join, i.e., all rows of wc are included
wide[wc, on = "PARENT_MOL_CHEMBL_ID"]
# PARENT_MOL_CHEMBL_ID ABL EGFR TP53 TARGET_TYPE extra_col1 extra_col2
#1: C10 1 1 0 ABL a 1
#2: C10 1 1 0 EGFR a 2
#3: C939 0 0 1 TP53 b 3
结果以宽格式显示聚合值以及任何其他列。
我有一个名为 "wc" 的数据框,格式如下
PARENT_MOL_CHEMBL_ID TARGET_TYPE
C10 ABL
C10 EGFR
C939 TP53
我想按以下格式重塑矩阵: 期望的输出
PARENT_MOL_CHEMBL_ID ABL EGFR TP53
C10 1 1 0
C939 0 0 1
我已经阅读了 R 中的 reshape 包。 我试过调用 cast 函数,但它不起作用。
cast(wc,PARENT_MOL_CHEMBL_ID~TARGET_TYPE, value = "TARGET_TYPE")
我不明白我应该在值部分使用什么参数。请指导我如何将 data.frame 转换为所需的形状。
如果有更好的替代方案,如 plyr 函数,请也突出显示替代方案。谢谢
library(tidyverse)
# create an example dataset
wc <- data.frame(PARENT_MOL_CHEMBL_ID = c("C10", "C10", "C939"), TARGET_TYPE = c("ABL", "EGFR", "TP53"))
wc <- wc %>%
# create an auxiliary variable
mutate(AUX = 1) %>%
# spread the data from long to wide and fill the empty cells with 0
# EDIT based on Sotos comment. Thanks! :)
spread(TARGET_TYPE, AUX, fill = 0)
结果是:
PARENT_MOL_CHEMBL_ID ABL EGFR TP53
C10 1 1 0
C939 0 0 1
更多信息:http://www.cookbook-r.com/Manipulating_data/Converting_data_between_wide_and_long_format/
OP 就 reshape
包的 cast()
函数的参数寻求帮助。但是,reshape
包已被同一包作者的 reshape2
包取代。根据包说明,reshape2
包是
A Reboot of the Reshape Package
使用reshape2
,可以用
reshape2::dcast(wc, PARENT_MOL_CHEMBL_ID ~ TARGET_TYPE, fun.aggregate = length,
value.var = "TARGET_TYPE")
# PARENT_MOL_CHEMBL_ID ABL EGFR TP53
#1 C10 1 1 0
#2 C939 0 0 1
顺便说一句:data.table
包也实现了(并增强了)dcast()
。因此,可以用
data.table::dcast(wc, PARENT_MOL_CHEMBL_ID ~ TARGET_TYPE, fun.aggregate = length,
value.var = "TARGET_TYPE")
其他列
OP
案例 1:其他列与 id 列一起使用
数据可能看起来像
wc
# PARENT_MOL_CHEMBL_ID TARGET_TYPE extra_col1
#1 C10 ABL a
#2 C10 EGFR a
#3 C939 TP53 b
注意extra_col1
中的值符合PARENT_MOL_CHEMBL_ID
.
这是一个简单的例子,因为 dcast()
中的公式接受 ...
,它表示公式中未使用的所有其他变量:
reshape2::dcast(wc, ... ~ TARGET_TYPE, fun.aggregate = length,
value.var = "TARGET_TYPE")
# PARENT_MOL_CHEMBL_ID extra_col1 ABL EGFR TP53
#1 C10 a 1 1 0
#2 C939 b 0 0 1
结果 data.frame 包含所有其他列。
案例 2:其他列不要与 id 列一起使用
现在,添加了另一列:
wc
# PARENT_MOL_CHEMBL_ID TARGET_TYPE extra_col1 extra_col2
#1 C10 ABL a 1
#2 C10 EGFR a 2
#3 C939 TP53 b 3
请注意 extra_col2
对 C10
有两个不同的值。这将导致简单方法失败。因此,必须实施两步法:首先重塑,然后与原始数据框连接。 data.table
包用于两个步骤,现在:
library(data.table)
# reshape from long to wide, result has only one row per id column
wide <- dcast(setDT(wc), PARENT_MOL_CHEMBL_ID ~ TARGET_TYPE, fun.aggregate = length,
value.var = "TARGET_TYPE")
# right join, i.e., all rows of wc are included
wide[wc, on = "PARENT_MOL_CHEMBL_ID"]
# PARENT_MOL_CHEMBL_ID ABL EGFR TP53 TARGET_TYPE extra_col1 extra_col2
#1: C10 1 1 0 ABL a 1
#2: C10 1 1 0 EGFR a 2
#3: C939 0 0 1 TP53 b 3
结果以宽格式显示聚合值以及任何其他列。