Nano Hash - криптовалюты, майнинг, программирование

Прокрутите фреймы данных, чтобы создать новую переменную

У меня есть 30 фреймов данных, и мне нужно создать новую переменную в каждом из них на основе ряда условий. Я пытаюсь выполнить цикл for, но не понимаю. Я искал здесь несколько примеров, но не зашел слишком далеко. Любая помощь, пожалуйста?

Я сделал следующее:

dflist <- c("chr1", "chr2","chr3","chr4","chr5","chr6","chr7","chr8","chr9","chr10",
            "chr11","chr12","chr13","chr14","chr15","chr16","chr17","chr18",
            "chr19","chr20","chr21","chr22","chr23","chr24","chr25","chr26","chr27",
            "chr28","chr29","chr30")


for (df in dflist){
for (i in 1:length(df)){
df[i,]$Dist2 =   ifelse(df[i,]$Dist <= 10000,1, 
            ifelse(df[i,]$Dist > 10000 & df[i,]$Dist <= 20000 ,2,
            ifelse(df[i,]$Dist > 20000 & df[i,]$Dist <= 30000 ,3,
        ifelse(df[i,]$Dist > 30000 & df[i,]$Dist <= 40000 ,4,
        ifelse(df[i,]$Dist > 40000 & df[i,]$Dist <= 50000 ,5,
        ifelse(df[i,]$Dist > 50000 & df[i,]$Dist <= 60000 ,6,
        ifelse(df[i,]$Dist > 60000 & df[i,]$Dist <= 70000 ,7,
        ifelse(df[i,]$Dist > 70000 & df[i,]$Dist <= 80000 ,8,
        ifelse(df[i,]$Dist > 80000 & df[i,]$Dist <= 90000 ,9,
        ifelse(df[i,]$Dist > 90000 & df[i,]$Dist <= 100000 ,10,NA))))))))))}}

Каждый файл выглядит так:

     Chr   SNP1   SNP2  Dist  Sign   r2
1     26 507478 507479  9727    + 0.789
2     26 507478 507480 13907    - 0.093
3     26 507478 507481 23618    - 0.002
4     26 507478 507482 59349    - 0.245
5     26 507478 507483 62804    + 0.266
6     26 507478 507484 65323    + 0.029

Большое спасибо. Ваше здоровье. Паула

14.09.2015

  • Я думаю, вы можете использовать cut вместо ifelse, т.е. cut(df$Dist, breaks=c(-Inf, seq(10000, 100000, by =10000), Inf)) и указать labels 14.09.2015
  • Если у вас есть list, lapply(lst, function(x) cut(x$Dist, breaks=c(-Inf, seq(10000, 100000, by =10000), Inf), labels=c(1:10, NA))) 14.09.2015
  • @akrun Спасибо. Но это не работает. Я получаю сообщение: Ошибка в x $ Dist: оператор $ недействителен для атомарных векторов. 14.09.2015
  • Пожалуйста, проверьте str(lst). Это матрица? 14.09.2015
  • @akrun Я сделал матрицу, но все равно получаю ту же ошибку. Спасибо за вашу помощь. 14.09.2015
  • Если это матрица, это не сработает. Я думал у вас есть data.frames. Я пробовал это на примере данных, который вы предоставили. Мне кажется, это работает. 14.09.2015
  • @akrun Мне очень жаль. Каждый файл представляет собой фрейм данных. str (df1): 'data.frame': 44005875 набл. из 6 переменных: $ X..Chr: int 26 26 26 26 26 26 26 26 26 26 ... $ SNP1: int 507478 507478 507478 507478 507478 507478 507478 507478 507478 507478 ... $ SNP2: int 507479 507480 507481 507482 507483 507484 507485 507486 507487 507488 ... $ Dist: int 9727 13907 23618 59349 62804 65323 66781 73715 83693 88691 ... $ Знак: chr + - - - ... $ r2: num 0,789 0,093 0,002 0,245 0,266 0,029 0,002 0,006 0,106 0,006 ... 14.09.2015
  • В этом случае у меня это сработало. 14.09.2015

Ответы:


1

Используя данные lst из ответа akrun, вот еще один возможный подход с использованием ceiling()

lapply(lst, function(x) {
    ## divide 'Dist' by 10,000 and push to the next integer
    y <- ceiling(x$Dist / 1e4)
    ## replace the values over 10 with NA
    is.na(y) <- y > 10
    ## bind the data to the new vector
    cbind(x, Dist2 = y)
})
# [[1]]
#   Chr   SNP1   SNP2   Dist Sign    r2 Dist2
# 1  26 507478 507479 123300    + 0.789    NA
# 2  26 507478 507480  13907    - 0.093     2
# 3  26 507478 507481  23618    - 0.002     3
# 4  26 507478 507482  59349    - 0.245     6
# 5  26 507478 507483  62804    + 0.266     7
# 6  26 507478 507484  65323    + 0.029     7
#
# [[2]]
#   Chr   SNP1   SNP2  Dist Sign    r2 Dist2
# 1  26 507478 507479  9727    + 0.789     1
# 2  26 507478 507480 13907    - 0.093     2
# 3  26 507478 507481 23618    - 0.002     3
# 4  26 507478 507482 59349    - 0.245     6
# 5  26 507478 507483 62804    + 0.266     7
# 6  26 507478 507484 65323    + 0.029     7
14.09.2015

2

Мы могли бы использовать cut. Мы сохраняем data.frames в list ('lst'), перебираем list с lapply и transform data.frame, создавая другой столбец Dist2 с помощью cut.

lapply(lst, transform, Dist2= cut(Dist, 
      breaks=c(-Inf,seq(1e4, 1e5, by=1e4), Inf), labels=c(1:10, NA)))
#[[1]]
#  Chr   SNP1   SNP2   Dist Sign    r2 Dist2
#1  26 507478 507479 123300    + 0.789  <NA>
#2  26 507478 507480  13907    - 0.093     2
#3  26 507478 507481  23618    - 0.002     3
#4  26 507478 507482  59349    - 0.245     6
#5  26 507478 507483  62804    + 0.266     7
#6  26 507478 507484  65323    + 0.029     7

#[[2]]
#  Chr   SNP1   SNP2  Dist Sign    r2 Dist2
#1  26 507478 507479  9727    + 0.789     1
#2  26 507478 507480 13907    - 0.093     2
#3  26 507478 507481 23618    - 0.002     3
#4  26 507478 507482 59349    - 0.245     6
#5  26 507478 507483 62804    + 0.266     7
#6  26 507478 507484 65323    + 0.029     7

данные

lst <- list(structure(list(Chr = c(26L, 26L, 26L, 26L, 26L, 26L),
SNP1 = c(507478L, 
507478L, 507478L, 507478L, 507478L, 507478L), SNP2 = 507479:507484, 
    Dist = c(123300, 13907, 23618, 59349, 62804, 65323), Sign = c("+", 
    "-", "-", "-", "+", "+"), r2 = c(0.789, 0.093, 0.002, 0.245, 
    0.266, 0.029)), .Names = c("Chr", "SNP1", "SNP2", "Dist", 
"Sign", "r2"), row.names = c("1", "2", "3", "4", "5", "6"),
 class = "data.frame"), 
    structure(list(Chr = c(26L, 26L, 26L, 26L, 26L, 26L), SNP1 = c(507478L, 
    507478L, 507478L, 507478L, 507478L, 507478L), SNP2 = 507479:507484, 
        Dist = c(9727L, 13907L, 23618L, 59349L, 62804L, 65323L
        ), Sign = c("+", "-", "-", "-", "+", "+"), r2 = c(0.789, 
        0.093, 0.002, 0.245, 0.266, 0.029)), .Names = c("Chr", 
    "SNP1", "SNP2", "Dist", "Sign", "r2"), class = "data.frame",
    row.names = c("1", 
    "2", "3", "4", "5", "6")))
14.09.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..