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
`
答案 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)