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

Подмножество цикла for и создание нескольких фреймов данных из этого цикла.

Я пытаюсь создать цикл for, который подмножает фрейм данных. Вот данные:

df1 <- data.frame(
  Number = c(45,62,27,34,37,55,40),
  Day = c("Mon", "Tues", "Wed", "Thurs", "Fri", "Sat", "Sun"),
  Time = c("1pm", "4pm", "3pm", "2pm", "4pm", "1pm", "2pm"),
  City = c("Chicago", "New York", "LA", "Miami", "San Diego", "Austin", "Dallas"))

Функция, которую я пытаюсь:

allNames<-variable.names(df1)


for (i in allNames){
  if(any(variable.names(df1)== i)){
    i <- df1[,c(i)]
  }
}

В основном я пытаюсь подмножить файл данных, чтобы конечным результатом было 4 набора данных, каждый с одной переменной из df1, и каждый подмножество набора данных будет называться переменной, которую он представляет. Это будет выглядеть так для каждой переменной из df1

 Number
1     45
2     62
3     27
4     34
5     37
6     55
7     40

    Day
1   Mon
2  Tues
3   Wed
4 Thurs
5   Fri
6   Sat
7   Sun

Спасибо!

05.04.2018

  • Думаю, я понимаю, о чем вы спрашиваете, но не могу понять, почему это может быть полезно. Например, наличие переменной с именем Number, которая представляет собой столбец data.frame из 1, кажется, что она не предлагает никакого значения (фактически, добавляет сложности) по сравнению с df1["Number"]. Возможно, если вы опишите, почему вы считаете это необходимым, мы сможем лучше посоветовать, как это сделать. (Обычно работу с несколькими похожими кадрами лучше всего выполнять в рамках list кадров, а не отдельных переменных.) 05.04.2018
  • @r2evans ... точно мои мысли! Это проблема XY. ОП дает нам свое Y-решение проблемы X, которую он не объясняет. Вероятно, ему нужен такой формат по какой-то причине, и это можно сделать по-другому, если ОП может предоставить нам более полную предысторию. 05.04.2018
  • Это всего лишь образец набора данных, чтобы понять суть того, что я пытаюсь сделать. Реальный набор данных намного больше, и переменные не связаны с этой выборкой. Мне просто нужно понять, возможно ли подмножество и создание нескольких отдельных кадров данных из цикла for. Ни больше ни меньше. Да, я могу решить свою проблему без цикла, но это требует больше строк кода утомительной работы. 05.04.2018
  • Никто не комментирует размер ваших данных или содержание переменных. Конечно, это просто примеры. Мы отмечаем, что для этого почти никогда не бывает веских причин. Если вы поделитесь с нами следующим шагом в своем процессе, мы почти наверняка сможем показать вам более простой и менее утомительный способ, который требует меньше строк кода, чем подход, который вы предлагаете в ваш вопрос. В противном случае ответ Росса в основном даст вам то, что вы хотите. 05.04.2018
  • Джейк, нет причин для враждебности. Часто вопросы, которые предлагают специально (но непреднамеренно) обойти оптимизации в R, основаны на непонимании, отсутствии опыта или чем-то еще. Часто бывает полезно задаться вопросом «почему?», чтобы можно было решить основную потребность таким образом, который более соответствует эффективности R. Хотя я думаю, что ответ, предоставленный Россом, не является лучшей практикой с точки зрения R, он отвечает вашим потребностям, поэтому, пожалуйста, примите его и двигайтесь дальше. В противном случае поймите, что наш вопрос «почему» основан на нашей готовности помочь вам. То же @Грегор. 05.04.2018
  • @ r2 Пожалуйста, укажите, где мой комментарий является враждебным? Я предоставил всю информацию, необходимую для ответа на вопрос, который я задал. Если вы не можете на него ответить, ничего страшного. Я ценю всю помощь, которую я получил на этом сайте. 05.04.2018
  • @ Джейк, мой ответ, кажется, достаточен для ваших конкретных потребностей, но я бы посоветовал вам описать более широкую проблему, если вы чувствуете, что можете. Я знаю, что когда я начинал, я искал подобный подход, и я нашел assign очень полезным, но со временем я изменил свой подход к программированию, редко использую assign и чувствую себя лучше, не делая этого. 06.04.2018

Ответы:


1

Пытаться:

for (i in allNames) {
  if(any(variable.names(df1)== i)) {assign(i, df1[,c(i)])}
}
05.04.2018
  • @Parfait Я не уверен, что это достигает того, о чем просил пользователь. Но да, это еще один совершенно правильный подход. 05.04.2018
  • @Parfait, я думаю, в вашем трюке следует использовать sapply(..., simplify=FALSE), чтобы он сохранял имена. И затем вы можете еще больше упростить все выражение как as.list(df1), потому что это все, что происходит (просто изменение класса с data.frame на list, почти без операции). Что опровергает первоначальный вопрос: почему? 05.04.2018
  • @r2evans ты знаешь, как решить проблему или нет? Почему не имеет значения, я задаю конкретный вопрос, чтобы ответить на конкретную проблему. Если вы знаете, как это решить, не стесняйтесь поделиться, если нет, не отвечайте. Я спросил, что именно я пытаюсь сделать. 05.04.2018
  • Просто используйте df1[,c(i), drop = FALSE], чтобы сохранить фрейм данных. 05.04.2018
  • Новые материалы

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

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

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

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

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

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

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