gpt4 book ai didi

r - 如何创建变量并将其应用于列?

转载 作者:行者123 更新时间:2023-12-04 15:59:11 24 4
gpt4 key购买 nike

这是一个由两部分组成的问题。我有一个数据集,我试图将选择列添加到一起,但我也想更改数据,以便添加更容易。这是我的数据集的一个例子。该数据集称为 ChrData

ChrData
Chr location sample1 sample2 sample3 sample4 sample5
1 1 34234 ./. 0/1 1/1 0/1 0/0
2 1 5677876 0/1 1/1 1/2 0/0 1/1
3 1 75424 ./. ./. 1/1 0/1 0/0
4 1 98654 1/1 0/1 1/1 0/0 0/0
5 1 4534 1/1 0/1 ./. 0/0 2/2

所以我想做的是设置
./. = 0 
0/0 = 0
0/1 = 1
1/2 = 1
1/1 = 2
2/2 = 2

然后添加列:
ChrData$sample1 + ChrData$sample2 + ChrData$sample4

并且:
ChrData$sample3 + ChrData$sample5 

然后使用这些数据创建两个新列。我只是不确定如何让 R 识别新变量,然后将它们应用于每个单元格?

最佳答案

使用 dplyr:

# reproducible data
ChrData <- read.table(text = "
Chr location sample1 sample2 sample3 sample4 sample5
1 1 34234 ./. 0/1 1/1 0/1 0/0
2 1 5677876 0/1 1/1 1/2 0/0 1/1
3 1 75424 ./. ./. 1/1 0/1 0/0
4 1 98654 1/1 0/1 1/1 0/0 0/0
5 1 4534 1/1 0/1 ./. 0/0 2/2", stringsAsFactors = FALSE)

library(dplyr)

# make lookup map
MAP <- setNames(c(0,0,1,1,2,2), c("./.","0/0","0/1","1/2","1/1","2/2"))

# convert using MAP, then rowsums per sample groups
ChrData <- ChrData %>%
mutate_at(.vars = vars(starts_with("sample")), .funs = funs(MAP[ . ])) %>%
mutate(s124 = rowSums(.[ c("sample1","sample2","sample4") ]),
s35 = rowSums(.[ c("sample3","sample5") ]))

ChrData
# Chr location sample1 sample2 sample3 sample4 sample5 s124 s35
# 1 1 34234 0 1 2 1 0 2 2
# 2 1 5677876 1 2 1 0 2 3 3
# 3 1 75424 0 0 2 1 0 1 2
# 4 1 98654 2 1 2 0 0 3 2
# 5 1 4534 2 1 0 0 2 3 2

关于r - 如何创建变量并将其应用于列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50952698/

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