表数学计算的功能

时间:2017-12-05 21:09:31

标签: r

SNP Ind_1   Ind_2   Ind_3   Ind_4   Ind_5
SNP1     0       0       1       2       0
SNP2     2       0       1       2       1
SNP3     2       0       0       2       1
SNP4     1       1       2       2       2

我想执行以下步骤

步骤1.为Ind_1添加所有SNP行值,然后将其减去10并创建一个带有分数的新rowname。例如:Ind_1 = 0 + 2 + 2 ..... = 5然后10-5 = 5

步骤2对Ind_2到Ind_5`

重复相同的分析

有超过1000个Ind行和超过50个SNP列。因此,对此的功能将是一个很大的帮助。实际值不是0,1或2.它们类似于1.5,0.05,0.001。,意味着介于0和2之间。我只是提供了这个表格看起来更容易

结果应如下所示

SNP Ind_1   Ind_2   Ind_3   Ind_4   Ind_5
SNP1      0       0      1       2       0
SNP2      2       0      1       2       0
SNP3      2       0      0       2       0
SNP4      1       1      2       2       0
SNP5      0       0      0       2       0
Score     5       9      6       0      10

`

2 个答案:

答案 0 :(得分:1)

你可以用一个简单的单行代码来完成:

# Your sample data
df <- read.table(text = 
    "SNP    Ind_1   Ind_2   Ind_3   Ind_4   Ind_5
     SNP1     0       0       1       2       0
     SNP2     2       0       1       2       1
     SNP3     2       0       0       2       1
     SNP4     1       1       2       2       2", header = T, row.names = 1);


df <- rbind.data.frame(df, score = 10 - colSums(df));
df;
#      Ind_1 Ind_2 Ind_3 Ind_4 Ind_5
#SNP1      0     0     1     2     0
#SNP2      2     0     1     2     1
#SNP3      2     0     0     2     1
#SNP4      1     1     2     2     2
#score     5     9     6     2     6

答案 1 :(得分:0)

使用基础R. dt2的解决方案是最终输出。

result <- as.data.frame(t(10 - colSums(dt[, 2:ncol(dt)])))
result$SNP <- "Score"
dt2 <- rbind(dt, result)
dt2

#     SNP Ind_1 Ind_2 Ind_3 Ind_4 Ind_5
# 1  SNP1     0     0     1     2     0
# 2  SNP2     2     0     1     2     1
# 3  SNP3     2     0     0     2     1
# 4  SNP4     1     1     2     2     2
# 5 Score     5     9     6     2     6

数据

dt <- read.table(text = "SNP Ind_1   Ind_2   Ind_3   Ind_4   Ind_5
SNP1     0       0       1       2       0
                 SNP2     2       0       1       2       1
                 SNP3     2       0       0       2       1
                 SNP4     1       1       2       2       2",
                 header = TRUE, stringsAsFactors = FALSE)