PleaseHelp
PleaseHelp

Reputation: 124

combine multiple elements in a list with different indexes in r

I have a list and I need to add together elements with different indexes. I'm struggling because I want to create a loop at different indexes.

data(aSAH)
rocobj <- roc(aSAH$outcome, aSAH$s100b)
dat<-coords(rocobj, "all", ret=c("threshold","sensitivity", "specificity"), as.list=TRUE)

I want to create a function where I can look at all the sensitivity/1-specificity combos at all thresholds in a new data frame. I know threshold is found in dat[1,], sensitivity is found in dat[2,] and specificity is found in dat[3,]. So I tried:

for (i in length(dat)) {
print(dat[1,i]
  print(dat[2,i]/(1-dat[3,i]))
}

Where I should end up with a dataframe that has threshold and sensitivity/1-specificity.

DATA

dput(head(aSAH))
structure(list(gos6 = structure(c(5L, 5L, 5L, 5L, 1L, 1L), .Label = c("1", 
"2", "3", "4", "5"), class = c("ordered", "factor")), outcome = structure(c(1L, 
1L, 1L, 1L, 2L, 2L), .Label = c("Good", "Poor"), class = "factor"), 
    gender = structure(c(2L, 2L, 2L, 2L, 2L, 1L), .Label = c("Male", 
    "Female"), class = "factor"), age = c(42L, 37L, 42L, 27L, 
    42L, 48L), wfns = structure(c(1L, 1L, 1L, 1L, 3L, 2L), .Label = c("1", 
    "2", "3", "4", "5"), class = c("ordered", "factor")), s100b = c(0.13, 
    0.14, 0.1, 0.04, 0.13, 0.1), ndka = c(3.01, 8.54, 8.09, 10.42, 
    17.4, 12.75)), .Names = c("gos6", "outcome", "gender", "age", 
"wfns", "s100b", "ndka"), row.names = 29:34, class = "data.frame")

EDIT One answer:

dat_transform <- as.data.frame(t(dat))
dat_transform <- dat_transform %>% mutate(new=sensitivity/(1-specificity))

Upvotes: 0

Views: 174

Answers (1)

Ronak Shah
Ronak Shah

Reputation: 388962

You can use :

transform(t, res = sensitivity/(1-specificity))[c(1, 4)]

Or with dplyr :

library(dplyr)

t %>%
  mutate(res = sensitivity/(1-specificity)) %>%
  select(threshold, res)

Also note that t is a default function in R to tranpose dataframe so better to use some other variable name for the dataframe.

Upvotes: 1

Related Questions