gpt4 book ai didi

r - 如何使用 if 和 for 语句将值从字符更改为数字?

转载 作者:行者123 更新时间:2023-12-04 23:18:44 25 4
gpt4 key购买 nike

我正在处理微阵列数据。

我有两张表,一张是pathway和gene set表(我称之为A表)
另一个是微阵列表(可以说是 B)

我需要根据B中基因符号的每个表达值将A表中的基因符号(字符)更改为表达值(数字)

表格如下所示

A table                                            B table
Pathway v1 v2 ...v249 v250 Gene Value
1 A E NA NA E 1000
2 B A Z I A 500
3 C G X NA G 200
4 D K P NA B 300
P 10
Z 20

我想像下面这样改变一个表
   A table                            
Pathway v1 v2 ... v249 v250
1 500 1000 NA NA
2 300 500 20 NA
3 NA 200 NA NA
4 NA NA 10 NA

如果没有匹配的基因符号,则应将其替换为“NA”

最佳答案

我会建议,首先融化,然后合并,dcasting 回来。这适用于 A 中的任意数量的列数据集。我将使用最新的 data.table CRAN 上的版本(v 1.9.6+)

library(data.table) # V 1.9.6+
res <- melt(setDT(A), id = "Pathway")[setDT(B), Value := i.Value, on = c(value = "Gene")]
dcast(res, Pathway ~ variable, value.var = "Value")
# Pathway v1 v2
# 1: 1 500 1000
# 2: 2 300 500
# 3: 3 NA 200
# 4: 4 NA NA

或类似地使用 Hadleyverse
library(dplyr)
library(tidyr)
A %>%
gather(res, Gene, -Pathway) %>%
left_join(., B, by = "Gene") %>%
select(-Gene) %>%
spread(res, Value)
# Pathway v1 v2
# 1 1 500 1000
# 2 2 300 500
# 3 3 NA 200
# 4 4 NA NA

数据
A <- structure(list(Pathway = 1:4, v1 = structure(1:4, .Label = c("A", 
"B", "C", "D"), class = "factor"), v2 = structure(c(2L, 1L, 3L,
4L), .Label = c("A", "E", "G", "K"), class = "factor")), .Names = c("Pathway",
"v1", "v2"), class = "data.frame", row.names = c(NA, -4L))

B <- structure(list(Gene = structure(c(3L, 1L, 4L, 2L), .Label = c("A",
"B", "E", "G"), class = "factor"), Value = c(1000L, 500L, 200L,
300L)), .Names = c("Gene", "Value"), class = "data.frame", row.names = c(NA,
-4L))

关于r - 如何使用 if 和 for 语句将值从字符更改为数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33212706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com