I have two files for normal and cancer for T cell blood cell sequence like below for cancer
> head(cancer[1:2,])
cloneId cloneCount cloneFraction targetSequences
1 0 64 0.02273535 TGCGCATCATGGGATAGCAGCCTGAAAATTGTCCTTTTC
2 1 64 0.02273535 TGTCAACACAGTTACTCTATTCCGTGGACGTTC
targetQualities allVHitsWithScore
1 EEEEEEENNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN IGLV1-51*00(117.6)
2 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN IGKV1-39*00(152),IGKV1D-39*00(152)
allDHitsWithScore allJHitsWithScore allCHitsWithScore
1 IGLJ2*00(42.3),IGLJ3*00(42.3) IGLC3*00(118),IGLC2*00(117.3)
2 IGKJ1*00(65.4) IGKC*00(75)
allVAlignments allDAlignments
1 421|446|473|0|25|SG425CSA427T|93.0
2 427|442|471|0|15|SG435C|59.0;349|364|395|0|15|SG357C|59.0
allJAlignments allCAlignments nSeqFR1 minQualFR1
1 27|30|58|36|39||15.0;27|30|58|36|39||15.0 ; NA NA
2 19|30|58|22|33||55.0 NA NA
nSeqCDR1 minQualCDR1 nSeqFR2 minQualFR2 nSeqCDR2 minQualCDR2 nSeqFR3 minQualFR3
1 NA NA NA NA NA NA NA NA
2 NA NA NA NA NA NA NA NA
nSeqCDR3 minQualCDR3 nSeqFR4 minQualFR4 aaSeqFR1
1 TGCGCATCATGGGATAGCAGCCTGAAAATTGTCCTTTTC 36 NA NA NA
2 TGTCAACACAGTTACTCTATTCCGTGGACGTTC 45 NA NA NA
aaSeqCDR1 aaSeqFR2 aaSeqCDR2 aaSeqFR3 aaSeqCDR3 aaSeqFR4
1 NA NA NA NA CASWDSSLKIVLF NA
2 NA NA NA NA CQHSYSIPWTF NA
refPoints
1 :::::::::0:-7:25:::::36:-7:39:::
2 :::::::::0:-9:15:::::22:1:33:::
> names(cancer)
[1] "cloneId" "cloneCount" "cloneFraction" "targetSequences"
[5] "targetQualities" "allVHitsWithScore" "allDHitsWithScore" "allJHitsWithScore"
[9] "allCHitsWithScore" "allVAlignments" "allDAlignments" "allJAlignments"
[13] "allCAlignments" "nSeqFR1" "minQualFR1" "nSeqCDR1"
[17] "minQualCDR1" "nSeqFR2" "minQualFR2" "nSeqCDR2"
[21] "minQualCDR2" "nSeqFR3" "minQualFR3" "nSeqCDR3"
[25] "minQualCDR3" "nSeqFR4" "minQualFR4" "aaSeqFR1"
[29] "aaSeqCDR1" "aaSeqFR2" "aaSeqCDR2" "aaSeqFR3"
[33] "aaSeqCDR3" "aaSeqFR4" "refPoints"
>
And for normal
> head(normal[1:2,])
cloneId cloneCount cloneFraction targetSequences
1 0 100 0.03745318 TGCGCATCATGGGATAGCAGCCTGAAAATTGTCCTTTTC
2 1 53 0.01985019 TGTCAACACAGTTACTCTATTCCGTGGACGTTC
targetQualities allVHitsWithScore
1 EEEENNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN IGLV1-51*00(115.8)
2 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNEEEE IGKV1-39*00(124.4),IGKV1D-39*00(124.4)
allDHitsWithScore allJHitsWithScore allCHitsWithScore
1 IGLJ2*00(44.8),IGLJ3*00(44.8) IGLC2*00(103.3),IGLC3*00(103.3)
2 IGKJ1*00(61.2) IGKC*00(114.2)
allVAlignments allDAlignments
1 421|446|473|0|25|SG425CSA427T|93.0
2 427|442|471|0|15|SG435C|59.0;349|364|395|0|15|SG357C|59.0
allJAlignments allCAlignments nSeqFR1 minQualFR1
1 27|30|58|36|39||15.0;27|30|58|36|39||15.0 ; NA NA
2 19|30|58|22|33||55.0 NA NA
nSeqCDR1 minQualCDR1 nSeqFR2 minQualFR2 nSeqCDR2 minQualCDR2 nSeqFR3 minQualFR3
1 NA NA NA NA NA NA NA NA
2 NA NA NA NA NA NA NA NA
nSeqCDR3 minQualCDR3 nSeqFR4 minQualFR4 aaSeqFR1
1 TGCGCATCATGGGATAGCAGCCTGAAAATTGTCCTTTTC 36 NA NA NA
2 TGTCAACACAGTTACTCTATTCCGTGGACGTTC 36 NA NA NA
aaSeqCDR1 aaSeqFR2 aaSeqCDR2 aaSeqFR3 aaSeqCDR3 aaSeqFR4
1 NA NA NA NA CASWDSSLKIVLF NA
2 NA NA NA NA CQHSYSIPWTF NA
refPoints
1 :::::::::0:-7:25:::::36:-7:39:::
2 :::::::::0:-9:15:::::22:1:33:::
>
How I can get subset the cancer file for uncommon elements in aaSeqCDR3 and nSeqCDR3 columns?
I mean I have cancer file in these two columns all elements are unique and not common with normal file
If we want to subset based on elements that are not present in 'normal', use anti_join
library(dplyr)
anti_join(cancer, normal[ c("aaSeqCDR3", "nSeqCDR3")],
by = c("aaSeqCDR3", "nSeqCDR3"))
Related
I've got a dataset like the following.
df <- read.table(header=TRUE, text="
T_A_01_F_1 T_A_02_F_1 T_A_03_F_1 T_A_01_F_2 T_A_02_F_2 T_A_03_F_2 T_A_01_U_1 T_A_02_U_1 T_A_03_U_1 T_A_01_U_2 T_A_02_U_2 T_A_03_U_2 T_B_01_F_1 T_B_02_F_1 T_B_03_F_1 T_B_01_F_2 T_B_02_F_2 T_B_03_F_2 T_B_01_U_1 T_B_02_U_1 T_B_03_U_1 T_B_01_U_2 T_B_02_U_2 T_B_03_U_2
1 2 3 NA NA NA 2 2 2 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2 2 5 NA NA NA 1 3 3 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
5 3 3 NA NA NA 2 1 2 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2 4 5 NA NA NA 6 3 4 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
NA NA NA 4 3 5 NA NA NA 4 3 2 NA NA NA NA NA NA NA NA NA NA NA NA
NA NA NA 4 4 5 NA NA NA 2 1 1 NA NA NA NA NA NA NA NA NA NA NA NA
NA NA NA 3 1 4 NA NA NA 2 1 7 NA NA NA NA NA NA NA NA NA NA NA NA
NA NA NA 2 1 6 NA NA NA 3 3 6 NA NA NA NA NA NA NA NA NA NA NA NA
NA NA NA NA NA NA NA NA NA NA NA NA 1 1 1 NA NA NA 2 3 1 NA NA NA
NA NA NA NA NA NA NA NA NA NA NA NA 2 1 1 NA NA NA 3 2 2 NA NA NA
NA NA NA NA NA NA NA NA NA NA NA NA 3 2 1 NA NA NA 4 2 1 NA NA NA
NA NA NA NA NA NA NA NA NA NA NA NA 2 5 4 NA NA NA 6 1 4 NA NA NA
NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 3 2 2 NA NA NA 1 2 5
NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 5 4 4 NA NA NA 3 3 5
NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 5 4 4 NA NA NA 1 3 5
NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 5 1 3 NA NA NA 7 5 1
")
In this case its a 2x2x2 mixed design with "T" being the variable of interest with 3 items, "A" and "B" the between factor, "F" and "U" the within factor and "1" and "2" the between factor. I'd like to reduce the dataset, so that I can compute a cronbachs alpha.
As every Person either got A or B and either 1 or 2 I'd like to combine those items, so that I only have the items T_01_F, T_01_U, T_02_F, T_02_U, T_03_F, T_03_U
I could do this by hand, but does somebody know a quick command with which I could do that?
Thank you so much in advance!!
best, Nash
Perhaps a combination of pivot_longer() and separate() might work since all your column names appear to share the same structure.
library(tidyverse)
df<- df %>%
rownames_to_column() %>%
pivot_longer(cols = T_A_01_F_1:T_B_03_U_2) %>%
separate(col = name, sep = "_", into = c("t", "a_b", "number" , "within", "between"))
I have a data set in which I'm tracking the dates a patient has specific symptoms
The data set looks like the following :
ID Date symp wt ht sympTY sympDays
1 1/05/2012 NA NA NA NA NA
1 1/06/2012 NA NA NA NA NA
1 1/07/2012 NA NA NA NA NA
1 1/08/2012 NA NA NA NA NA
1 1/09/2012 NA NA NA NA NA
1 1/10/2012 NA NA NA NA NA
1 1/11/2012 1 23 15 1 3
1 1/23/2015 NA 27 19 NA NA
2 2/17/2014 NA NA NA NA NA
2 2/18/2014 NA NA NA NA NA
2 2/19/2014 NA NA NA NA NA
2 2/20/2014 NA NA NA NA NA
2 2/21/2014 NA NA NA NA NA
2 2/22/2014 NA NA NA NA NA
2 2/23/2014 1 17 22 0 2
2 2/22/2016 NA NA NA NA NA
2 2/23/2016 NA NA NA NA NA
2 2/24/2016 NA NA NA NA NA
2 2/25/2016 NA NA NA NA NA
2 2/26/2016 NA NA NA NA NA
2 2/27/2016 NA NA NA NA NA
2 2/28/2016 1 20 30 1 5
2 3/17/2017 NA 25 32 NA NA
I want to create a new variable sympfl that tracks each day an individual has symptoms
additional info that may be pertinent :
symp - whether a patient has symptoms within the last week
sympTY - whether a patient had these symptoms today or yesterday
sympDays - the number of days the patient had these symptoms within the
past week
Conditions for new sympfl variable:
if symp == 1 and sympTY == 1, then sympfl == 1 starting on the present date going back the number sympDays column holds
if symp == 1 and sympTY == 0, then sympfl == 1 starting 2 days prior to the present date and going back the number the sympDays column holds
The new data set would ideally look like the following:
ID Date symp wt ht sympTY sympDays sympfl
1 1/05/2012 NA NA NA NA NA NA
1 1/06/2012 NA NA NA NA NA NA
1 1/07/2012 NA NA NA NA NA NA
1 1/08/2012 NA NA NA NA NA NA
1 1/09/2012 NA NA NA NA NA 1
1 1/10/2012 NA NA NA NA NA 1
1 1/11/2012 1 23 15 1 3 1
1 1/23/2015 NA 27 19 NA NA NA
2 2/17/2014 NA NA NA NA NA NA
2 2/18/2014 NA NA NA NA NA NA
2 2/19/2014 NA NA NA NA NA NA
2 2/20/2014 NA NA NA NA NA 1
2 2/21/2014 NA NA NA NA NA 1
2 2/22/2014 NA NA NA NA NA NA
2 2/23/2014 1 17 22 0 2 NA
2 2/22/2016 NA NA NA NA NA NA
2 2/23/2016 NA NA NA NA NA NA
2 2/24/2016 NA NA NA NA NA 1
2 2/25/2016 NA NA NA NA NA 1
2 2/26/2016 NA NA NA NA NA 1
2 2/27/2016 NA NA NA NA NA 1
2 2/28/2016 1 20 30 1 5 1
2 3/17/2017 NA 25 32 NA NA NA
I know in order to do this, I can use an if statement, but I'm uncertain how to do this over a number of rows by dates. Any help or direction is greatly appreciated.
Here is a data.table solution which reproduces the expected result for the given sample dataset:
library(data.table)
setDT(DT)[, Date := lubridate::mdy(Date)][
order(ID, -Date), sympfl := {
if (!is.na(first(symp))) {
tmp <- rep(NA_integer_, .N);
replace(tmp, 1 + seq((1 - first(sympTY)) * 3, length.out = first(sympDays)), 1)
}}, by = cumsum(!is.na(symp))][]
ID Date symp wt ht sympTY sympDays sympfl
1: 1 2012-01-05 NA NA NA NA NA NA
2: 1 2012-01-06 NA NA NA NA NA NA
3: 1 2012-01-07 NA NA NA NA NA NA
4: 1 2012-01-08 NA NA NA NA NA NA
5: 1 2012-01-09 NA NA NA NA NA 1
6: 1 2012-01-10 NA NA NA NA NA 1
7: 1 2012-01-11 1 23 15 1 3 1
8: 1 2015-01-23 NA 27 19 NA NA NA
9: 2 2014-02-17 NA NA NA NA NA NA
10: 2 2014-02-18 NA NA NA NA NA NA
11: 2 2014-02-19 NA NA NA NA NA 1
12: 2 2014-02-20 NA NA NA NA NA 1
13: 2 2014-02-21 NA NA NA NA NA NA
14: 2 2014-02-22 NA NA NA NA NA NA
15: 2 2014-02-23 1 17 22 0 2 NA
16: 2 2016-02-22 NA NA NA NA NA NA
17: 2 2016-02-23 NA NA NA NA NA NA
18: 2 2016-02-24 NA NA NA NA NA 1
19: 2 2016-02-25 NA NA NA NA NA 1
20: 2 2016-02-26 NA NA NA NA NA 1
21: 2 2016-02-27 NA NA NA NA NA 1
22: 2 2016-02-28 1 20 30 1 5 1
23: 2 2017-03-17 NA 25 32 NA NA NA
ID Date symp wt ht sympTY sympDays sympfl
Data
library(data.table)
DT <- fread("
ID Date symp wt ht sympTY sympDays
1 1/05/2012 NA NA NA NA NA
1 1/06/2012 NA NA NA NA NA
1 1/07/2012 NA NA NA NA NA
1 1/08/2012 NA NA NA NA NA
1 1/09/2012 NA NA NA NA NA
1 1/10/2012 NA NA NA NA NA
1 1/11/2012 1 23 15 1 3
1 1/23/2015 NA 27 19 NA NA
2 2/17/2014 NA NA NA NA NA
2 2/18/2014 NA NA NA NA NA
2 2/19/2014 NA NA NA NA NA
2 2/20/2014 NA NA NA NA NA
2 2/21/2014 NA NA NA NA NA
2 2/22/2014 NA NA NA NA NA
2 2/23/2014 1 17 22 0 2
2 2/22/2016 NA NA NA NA NA
2 2/23/2016 NA NA NA NA NA
2 2/24/2016 NA NA NA NA NA
2 2/25/2016 NA NA NA NA NA
2 2/26/2016 NA NA NA NA NA
2 2/27/2016 NA NA NA NA NA
2 2/28/2016 1 20 30 1 5
2 3/17/2017 NA 25 32 NA NA ")
> data$Accepted.Final.round
[1] NA NA NA NA NA NA NA NA 1 NA NA NA NA 1 1 1 1 0 1 0 0 1 1 1
1
1 NA 1 1 1 1
[32] NA 1 1 0 1 1 1 1 1 1 NA 1 1 0 1 1 0 1 1 1 1 1 1 1
1
NA 1 NA NA NA NA
[63] NA NA NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA
NA
NA NA NA NA NA NA
[94] NA NA NA NA NA NA NA NA NA NA NA NA NA 1 NA NA NA NA NA
I have a dataset column consists of NA, 1, 0. However when I try
data$Accepted.Final.round[data$Accepted.Final.round==NA]<-0
or
ifelse(data$Accepted.Final.round==1,1,0)
to replace NA with 0, both lines cannot work.
Could you guys think of any ways to fix this?
Use is.na() to determine if a value is NA. NA is contagious, meaning that doing operations with NA usually returns NA. That includes checking for equality with ==, i.e. x == NA will always return NA and not TRUE or FALSE.
x <- c(2, NA, 2)
x[is.na(x)] <- 0
The second attempt from OP was pretty close:
data$Accepted.Final.round <- ifelse(is.na(data$Accepted.Final.round),
0 ,data$Accepted.Final.round)
The document for ifelse explains as:
Usages:
ifelse(test, yes, no)
yes will be evaluated if and only if any element of test is true, and
analogously for no.
Missing values (i.e. NA) in test give missing (NA) values in the result.
I am trying to find the number of discordant and concordant pairs in a clinical trial, and have come across the 'asbio' library which provides the function ConDis.matrix. (http://artax.karlin.mff.cuni.cz/r-help/library/asbio/html/ConDis.matrix.html)
The dataset they give as an example is:
crab<-data.frame(gill.wt=c(159,179,100,45,384,230,100,320,80,220,320,210),
body.wt=c(14.4,15.2,11.3,2.5,22.7,14.9,1.41,15.81,4.19,15.39,17.25,9.52))
attach(crab)
crabm<-ConDis.matrix(gill.wt,body.wt)
crabm
Which gives a result that looks like:
1 2 3 4 5 6 7 8 9 10 11 12
1 NA NA NA NA NA NA NA NA NA NA NA NA
2 1 NA NA NA NA NA NA NA NA NA NA NA
3 1 1 NA NA NA NA NA NA NA NA NA NA
4 1 1 1 NA NA NA NA NA NA NA NA NA
5 1 1 1 1 NA NA NA NA NA NA NA NA
6 1 -1 1 1 1 NA NA NA NA NA NA NA
7 1 1 0 -1 1 1 NA NA NA NA NA NA
8 1 1 1 1 1 1 1 NA NA NA NA NA
9 1 1 1 1 1 1 -1 1 NA NA NA NA
10 1 1 1 1 1 -1 1 1 1 NA NA NA
11 1 1 1 1 1 1 1 0 1 1 NA NA
12 -1 -1 -1 1 1 1 1 1 1 1 1 NA
The solution I can think of is adding up the 1s and -1s (for concordant and discordant) respectively but I don't know how to count values in a matrix. Alternatively is someone has a better way of counting concordant/discordant then I would love to know.
Your found solution was
sum(crabm == 1, na.rm = TRUE)
[1] 57
sum(crabm == -1, na.rm = TRUE)
[1] 7
You could try (C...concordant, D...discordant pairs):
library(DescTools)
tab <- table(crab$gill.wt, crab$body.wt)
ConDisPairs(tab)[c("C","D")]
$C
[1] 57
$D
[1] 7
This question already has an answer here:
Multiply each element in a vector by itself to create a matrix
(1 answer)
Closed 8 years ago.
I have this matrix
m<- matrix(c(0:13),nrow=2,ncol=7)
colnames(m)<-c("0","1","2","3","4","5","6")
rownames(m)<-c("A","B")
0 1 2 3 4 5 6
A 0 2 4 6 8 10 12
B 1 3 5 7 9 11 13
and I want to multiply each observation in row one by each observation in row two. So I would have something that looks like this
0 1 2 3 4 5 6
0 NA NA NA NA NA NA NA
1 NA NA NA NA NA NA NA
2 NA NA NA NA NA NA NA
3 NA NA NA NA NA NA NA
4 NA NA NA NA NA NA NA
5 NA NA NA NA NA NA NA
6 NA NA NA NA NA NA NA
Try
outer(m[1,], m[2,], FUN='*')
or
as.matrix(m[1,])%*% m[2,]