kandi background
Explore Kits

ion | Android Asynchronous Networking and Image Loading

 by   koush Java Version: Current License: Non-SPDX

 by   koush Java Version: Current License: Non-SPDX

Download this library from

kandi X-RAY | ion Summary

ion is a Java library. ion has no bugs, it has no vulnerabilities, it has build file available and it has high support. However ion has a Non-SPDX License. You can download it from GitHub, Maven.
The included documented ion-sample project includes some samples that demo common Android network operations:. Looking for more? Check out the examples below that demonstrate some other common scenarios. You can also take a look at 30+ ion unit tests in the ion-test.
Support
Support
Quality
Quality
Security
Security
License
License
Reuse
Reuse

kandi-support Support

  • ion has a highly active ecosystem.
  • It has 6266 star(s) with 1064 fork(s). There are 342 watchers for this library.
  • It had no major release in the last 12 months.
  • There are 327 open issues and 549 have been closed. On average issues are closed in 507 days. There are 8 open pull requests and 0 closed requests.
  • It has a positive sentiment in the developer community.
  • The latest version of ion is current.
ion Support
Best in #Java
Average in #Java
ion Support
Best in #Java
Average in #Java

quality kandi Quality

  • ion has 0 bugs and 0 code smells.
ion Quality
Best in #Java
Average in #Java
ion Quality
Best in #Java
Average in #Java

securitySecurity

  • ion has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.
  • ion code analysis shows 0 unresolved vulnerabilities.
  • There are 0 security hotspots that need review.
ion Security
Best in #Java
Average in #Java
ion Security
Best in #Java
Average in #Java

license License

  • ion has a Non-SPDX License.
  • Non-SPDX licenses can be open source with a non SPDX compliant license, or non open source licenses, and you need to review them closely before use.
ion License
Best in #Java
Average in #Java
ion License
Best in #Java
Average in #Java

buildReuse

  • ion releases are not available. You will need to build from source code and install.
  • Deployable package is available in Maven.
  • Build file is available. You can build the component from source.
  • Installation instructions are not available. Examples and code snippets are available.
  • ion saves you 4932 person hours of effort in developing the same functionality from scratch.
  • It has 10387 lines of code, 821 functions and 153 files.
  • It has medium code complexity. Code complexity directly impacts maintainability of the code.
ion Reuse
Best in #Java
Average in #Java
ion Reuse
Best in #Java
Average in #Java
Top functions reviewed by kandi - BETA

kandi has reviewed ion and discovered the below as its top functions. This is intended to give you an instant insight into ion implemented functionality, and help decide if they suit your requirements.

  • Recursively draw a zoom level tile .
  • Decode image data .
  • Returns the orientation of the image .
  • Called when the bitmap loader finishes .
  • Returns a list of all attributes of the specified attribute type .
  • Reports an exception to the cache .
  • Fast loading of a file
  • Gets the emitter emitter .
  • Extract the dnsject alternative names from a certificate .
  • Transforms an image .

ion Key Features

Maven

Git

Kotlin coroutine/suspend support

Asynchronously download: Images into ImageViews or Bitmaps (animated GIFs supported too) JSON (via Gson) Strings Files Java types using Gson

Easy to use Fluent API designed for Android Automatically cancels operations when the calling Activity finishes Manages invocation back onto the UI thread All operations return a Future and can be cancelled

HTTP POST/PUT: text/plain application/json - both JsonObject and POJO application/x-www-form-urlencoded multipart/form-data

Transparent usage of HTTP features and optimizations: SPDY and HTTP/2 Caching Gzip/Deflate Compression Connection pooling/reuse via HTTP Connection: keep-alive Uses the best/stablest connection from a server if it has multiple IP addresses Cookies

View received headers

Grouping and cancellation of requests

Download progress callbacks

Supports file:/, http(s):/, and content:/ URIs

Request level logging and profiling

Support for proxy servers like Charles Proxy to do request analysis

Based on NIO and AndroidAsync

Ability to use self signed SSL certificates

Twitter Client Sample Download JSON from a server (twitter feed) Populate a ListView Adapter and fetch more data as you scroll to the end Put images from a URLs into ImageViews (twitter profile pictures)

File Download with Progress Bar Sample

Get JSON and show images with the Image Search Sample

Disk and memory caching

Bitmaps are held via weak references so memory is managed very efficiently

ListView Adapter recycling support

Bitmap transformations via the .transform(Transform)

Animate loading and loaded ImageView states

DeepZoom for extremely large images

ion/ion/bin/classes.jar

AndroidAsync/AndroidAsync/bin/classes.jar

Import the project from AndroidAsync/AndroidAsync into your workspace

Import all the ion projects (ion/ion, ion/ion-sample) into your workspace.

AllCast

Helium

Repost

Cloupload

Binge

PictureCast

Eventius

Plume

GameRaven

See You There

Doogles

default

copy iconCopydownload iconDownload
Ion.with(context)
.load("http://example.com/thing.json")
.asJsonObject()
.setCallback(new FutureCallback<JsonObject>() {
   @Override
    public void onCompleted(Exception e, JsonObject result) {
        // do stuff with the result or error
    }
});

Split a dataframe column containing delimited strings into multiple columns and retain specific portions of the split strings

copy iconCopydownload iconDownload
library(tidyr)
library(dplyr)

df %>%
  mutate(id = seq(nrow(.))) %>%
  separate_rows(GO, sep = ";\\s") %>%
  separate(GO, into = c("category", "item"), sep = ":") %>%
  mutate(category = recode(category, C = "CC", P = "BP", F = "MF", .default = "foo")) %>%
  replace_na(list(item = "")) %>%
  group_by(id, category) %>%
  summarise(items = paste(item, collapse = "; "), .groups = "drop") %>%
  pivot_wider(names_from = category, values_from = items, values_fill = "") %>%
  select(BP, CC, MF)
#> Warning: Expected 2 pieces. Missing pieces filled with `NA` in 3 rows [3, 7,
#> 11].
#> # A tibble: 7 × 3
#>   BP                                           CC                          MF   
#>   <chr>                                        <chr>                       <chr>
#> 1 ""                                           "mitochondrion; kinetoplas… ""   
#> 2 ""                                           ""                          ""   
#> 3 ""                                           "cytoplasm; axoneme"        "cal…
#> 4 ""                                           ""                          ""   
#> 5 "cilium movement; inner dynein arm assembly" "axoneme"                   ""   
#> 6 ""                                           ""                          ""   
#> 7 ""                                           ""                          "cal…
-----------------------
library(tidyverse)

df %>%
  mutate(row = row_number()) %>%
  separate_rows(GO, sep = '; ') %>% 
  mutate(names = case_when(str_detect(GO, 'C:')~"CC",
                           str_detect(GO, 'F:')~"MF",
                           str_detect(GO, 'P:')~"BP",
                           TRUE ~ NA_character_)) %>% 
  mutate(GO = str_replace_all(GO, '.\\:', '')) %>% 
  group_by(row, names) %>% 
  mutate(b_x = paste(GO, collapse = "; ")) %>% 
  distinct(b_x) %>% 
  na.omit() %>% 
  pivot_wider(
    names_from = names, 
    values_from = b_x
  ) %>% 
  ungroup() %>% 
  select(BP, CC, MF)

  BP                                         CC                         MF                 
  <chr>                                      <chr>                      <chr>              
1 NA                                         mitochondrion; kinetoplast NA                 
2 NA                                         cytoplasm; axoneme         calmodulin binding 
3 cilium movement; inner dynein arm assembly axoneme                    NA                 
4 NA                                         NA                         calcium ion binding
-----------------------
library(tidyverse)

df %>%
  mutate(row = row_number()) %>%
  separate_rows(GO, sep = '; ') %>% 
  mutate(names = case_when(str_detect(GO, 'C:')~"CC",
                           str_detect(GO, 'F:')~"MF",
                           str_detect(GO, 'P:')~"BP",
                           TRUE ~ NA_character_)) %>% 
  mutate(GO = str_replace_all(GO, '.\\:', '')) %>% 
  group_by(row, names) %>% 
  mutate(b_x = paste(GO, collapse = "; ")) %>% 
  distinct(b_x) %>% 
  na.omit() %>% 
  pivot_wider(
    names_from = names, 
    values_from = b_x
  ) %>% 
  ungroup() %>% 
  select(BP, CC, MF)

  BP                                         CC                         MF                 
  <chr>                                      <chr>                      <chr>              
1 NA                                         mitochondrion; kinetoplast NA                 
2 NA                                         cytoplasm; axoneme         calmodulin binding 
3 cilium movement; inner dynein arm assembly axoneme                    NA                 
4 NA                                         NA                         calcium ion binding
-----------------------
library(tidyverse)

df %>% 
  rownames_to_column("id") %>% 
  separate_rows(GO, sep = "; ") %>% 
  separate(GO, into = c("name", "value"), sep = ":", fill = "right") %>% 
  filter(complete.cases(.)) %>% 
  pivot_wider(id_cols = id, values_fn = list) %>% rowwise %>% 
  mutate(across(-id, ~ str_c(.x, collapse = "; "))) %>% 
  left_join(data.frame(id = seq(nrow(df)) %>% as.character), .) %>% 
  mutate(across(everything(), replace_na, "")) %>% 
  select(BP = P, CC = C, MF = F)

#> Joining, by = "id"
#>                                           BP                         CC
#> 1                                            mitochondrion; kinetoplast
#> 2                                                                      
#> 3                                                    cytoplasm; axoneme
#> 4                                                                      
#> 5 cilium movement; inner dynein arm assembly                    axoneme
#> 6                                                                      
#> 7                                                                      
#>                    MF
#> 1                    
#> 2                    
#> 3  calmodulin binding
#> 4                    
#> 5                    
#> 6                    
#> 7 calcium ion binding

How to toggle two icons in v-for list item in Vue

copy iconCopydownload iconDownload
new Vue({
  el: "#demo",
  data() {
      return {
        courses: [{id:1, name: 'aaa'}, {id:2, name: 'bbb'},{id:3, name: 'ccc'}],
        isSelected:  null
      }
    },
    methods: {
      toggleIcons(id){
        this.isSelected === id ? this.isSelected=null : this.isSelected = id
      }
    }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="demo">
  <div v-for="course in courses" :key="course.id">
    <label class="ion-text-wrap">{{ course.name }}</label>
    <button @click="toggleIcons(course.id)">
    click
      <div v-if="isSelected === course.id " slot="end">1</div>
      <div v-if="isSelected !== course.id " slot="end">2</div>
    </button>
  </div>
</div>
-----------------------
new Vue({
  el: "#demo",
  data() {
      return {
        courses: [{id:1, name: 'aaa'}, {id:2, name: 'bbb'},{id:3, name: 'ccc'}],
        isSelected:  null
      }
    },
    methods: {
      toggleIcons(id){
        this.isSelected === id ? this.isSelected=null : this.isSelected = id
      }
    }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="demo">
  <div v-for="course in courses" :key="course.id">
    <label class="ion-text-wrap">{{ course.name }}</label>
    <button @click="toggleIcons(course.id)">
    click
      <div v-if="isSelected === course.id " slot="end">1</div>
      <div v-if="isSelected !== course.id " slot="end">2</div>
    </button>
  </div>
</div>
-----------------------
  data() {
    return {
      selectedCourseId: null,
    }
  },
  methods: {
    setSelectedCourseId(id) {
      this.selectedCourseId = id
    },
  }
<ion-item v-for="course in courses" :key="course.id">
  <ion-label class="ion-text-wrap">{{ course.name }}</ion-label>
  <span @click="toggleIcons">
    <ion-icon v-if="selectedCourseId === course.id" :icon="ellipseOutline" slot="end"></ion-icon>
    <ion-icon v-else :icon="checkmarkCircleOutline" slot="end"></ion-icon>
  </span>
</ion-item>
-----------------------
  data() {
    return {
      selectedCourseId: null,
    }
  },
  methods: {
    setSelectedCourseId(id) {
      this.selectedCourseId = id
    },
  }
<ion-item v-for="course in courses" :key="course.id">
  <ion-label class="ion-text-wrap">{{ course.name }}</ion-label>
  <span @click="toggleIcons">
    <ion-icon v-if="selectedCourseId === course.id" :icon="ellipseOutline" slot="end"></ion-icon>
    <ion-icon v-else :icon="checkmarkCircleOutline" slot="end"></ion-icon>
  </span>
</ion-item>
-----------------------
  data() {
    return {
      selectedCourseId: null,
    }
  },
  methods: {
    setSelectedCourseId(id) {
      this.selectedCourseId = id
    },
  }
<ion-item v-for="course in courses" :key="course.id">
  <ion-label class="ion-text-wrap">{{ course.name }}</ion-label>
  <span @click="toggleIcons">
    <ion-icon v-if="selectedCourseId === course.id" :icon="ellipseOutline" slot="end"></ion-icon>
    <ion-icon v-else :icon="checkmarkCircleOutline" slot="end"></ion-icon>
  </span>
</ion-item>

CSS how to prevent keyboard from shifting content up?

copy iconCopydownload iconDownload
<ion-header>
  <ion-back-button>
  Register
  ...
</ion-header>

<ion-content [fullscreen]=true class='myMaxHeightClass'>
  ...enter form inputs here
</ion-content>

<ion-footer>
 <p>Already have an account?</p>
 <ion-button>Login</ion-button>
</ion-footer>
.myMaxHeightClass {
    height: calc(100vh-150px)
 }
-----------------------
<ion-header>
  <ion-back-button>
  Register
  ...
</ion-header>

<ion-content [fullscreen]=true class='myMaxHeightClass'>
  ...enter form inputs here
</ion-content>

<ion-footer>
 <p>Already have an account?</p>
 <ion-button>Login</ion-button>
</ion-footer>
.myMaxHeightClass {
    height: calc(100vh-150px)
 }

Remove text which is displayed on bars in plotly bar chart

copy iconCopydownload iconDownload
fig <- plot_ly(x = ~`Element Name`,text = ~Department, data = dp) %>% 
  add_bars(y = ~`DemandCourse`, 
           name = "Demand", 
           textposition = "none",          # <--- added here
           hovertemplate = paste0("Chemical Name: %{x}<br>", 
                                  "Demand: %{y}<br>",
                                  "Department: %{text}<extra></extra>")) %>% 
  add_bars(y = ~`Amount Available`,
           name = "Amount Available", 
           textposition = "none",          # <--- added here
           hovertemplate = paste0("Chemical Name: %{x}<br>",  
                                  "Available Amount: %{y}<br>",
                                  "Department: %{text}<extra></extra>")) %>% 
  layout(barmode = "stack",                # <--- dropped showLegend (doesn't go here)
         xaxis = list(title = "Element Name", tickangle=45),
         yaxis = list(title = "Amount Available"),
         title = "Amount and Demand per Element")
fig
-----------------------
library(plotly)

fig <- plot_ly(x = ~`Element Name`, hovertext = ~Department, data = dp) %>%
  add_bars(y = ~`DemandCourse`, 
           name = "Demand", 
           hovertemplate = paste0("Chemical Name: %{x}<br>", 
                                  "Demand: %{y}<br>",
                                  "Department: %{hovertext}<extra></extra>")) %>%
  add_bars(y = ~`Amount Available`,
           name = "Amount Available", 
           hovertemplate = paste0("Chemical Name: %{x}<br>",  
                                  "Available Amount: %{y}<br>",
                                  "Department: %{hovertext}<extra></extra>")) %>%
  layout(showlegend = TRUE,
         barmode = "stack",
         xaxis = list(title = "Element Name", tickangle=45),
         yaxis = list(title = "Amount Available"),
         title = "Amount and Demand per Element")
fig

How can I make a Shiny app W3C compliant?

copy iconCopydownload iconDownload
# Reprex adapted from https://shiny.rstudio.com/gallery/tabsets.html
library(shiny)
library(htmltools)

# Define UI for random distribution app ----
ui <- fluidPage(
  
  # App title ----
  titlePanel("Tabsets"),
  
  # Sidebar layout with input and output definitions ----
  sidebarLayout(
    
    # Sidebar panel for inputs ----
    {querySidebarPanel <- tagQuery(sidebarPanel(
      # Input: Select the random distribution type ----
      radioButtons("dist", "Distribution type:",
                   c("Normal" = "norm",
                     "Uniform" = "unif",
                     "Log-normal" = "lnorm",
                     "Exponential" = "exp")),
      
      # br() element to introduce extra vertical spacing ----
      br(),
      
      # Input: Slider for the number of observations to generate ----
      sliderInput("n",
                  "Number of observations:",
                  value = 500,
                  min = 1,
                  max = 1000)
    ))
    querySidebarPanel$find(".well")$removeAttrs("role")$addAttrs("role" = "none")$allTags()},
    
    # Main panel for displaying outputs ----
    mainPanel(
      
      # Output: Tabset w/ plot, summary, and table ----
      tabsetPanel(type = "tabs",
                  tabPanel("Plot", plotOutput("plot")),
                  tabPanel("Summary", verbatimTextOutput("summary")),
                  tabPanel("Table", tableOutput("table"))
      )
      
    )
  )
)

# Define server logic for random distribution app ----
server <- function(input, output) {
  
  # Reactive expression to generate the requested distribution ----
  d <- reactive({
    dist <- switch(input$dist,
                   norm = rnorm,
                   unif = runif,
                   lnorm = rlnorm,
                   exp = rexp,
                   rnorm)
    
    dist(input$n)
  })
  
  # Generate a plot of the data ----
  output$plot <- renderPlot({
    dist <- input$dist
    n <- input$n
    
    hist(d(),
         main = paste("r", dist, "(", n, ")", sep = ""),
         col = "#75AADB", border = "white")
  })
}

# Create Shiny app ----
shinyApp(ui, server)

How to calculate center of mass of proteins using MDAnalysis?

copy iconCopydownload iconDownload
import MDAnalysis as mda
import numpy as np

# files from https://doi.org/10.5281/zenodo.846428
TPR = "lp400.tpr"
XTC = "lp400.xtc"

# build reduced universe to match XTC
# (ignore warnings that no coordinates are found for the TPR)
u0 = mda.Universe(TPR)
u = mda.Merge(u0.select_atoms("not resname W and not resname WF and not resname ION"))
u.load_new(XTC)

# segments (exclude the last one, which is DPPC and not protein)
protein_segments = u.segments[:-1]

# build the fragments
# (a dictionary with the key as the protein name -- I am using an
# OrderedDict so that the order is the same as in the TPR)
from collections import OrderedDict
protein_fragments = OrderedDict((seg.segid[6:], seg.atoms.fragments) for seg in protein_segments)

# analyze trajectory (with a nice progress bar)
timeseries = []
for ts in mda.log.ProgressBar(u.trajectory):
    coms = []
    for name, proteins in protein_fragments.items():
        # loop over all the different proteins;
        # unwrap to get the true COM under PBC (double check!!)
        coms.extend([p.center_of_mass(unwrap=True) for p in proteins]) 
    timeseries.append(coms)
timeseries = np.array(timeseries)
OrderedDict([('EPHA', (<AtomGroup with 74 atoms>, <AtomGroup with 74 atoms>)),
           ('OMPA', (<AtomGroup with 307 atoms>, <AtomGroup with 307 atoms>)),
           ('OMPG', (<AtomGroup with 606 atoms>, <AtomGroup with 606 atoms>)),
           ('BTUB', (<AtomGroup with 1289 atoms>, <AtomGroup with 1289 atoms>)),
           ('ATPS', (<AtomGroup with 1918 atoms>, <AtomGroup with 1918 atoms>)),
           ('GLPF', (<AtomGroup with 2136 atoms>, <AtomGroup with 2136 atoms>)),
           ('FOCA', (<AtomGroup with 2685 atoms>, <AtomGroup with 2685 atoms>))])
-----------------------
import MDAnalysis as mda
import numpy as np

# files from https://doi.org/10.5281/zenodo.846428
TPR = "lp400.tpr"
XTC = "lp400.xtc"

# build reduced universe to match XTC
# (ignore warnings that no coordinates are found for the TPR)
u0 = mda.Universe(TPR)
u = mda.Merge(u0.select_atoms("not resname W and not resname WF and not resname ION"))
u.load_new(XTC)

# segments (exclude the last one, which is DPPC and not protein)
protein_segments = u.segments[:-1]

# build the fragments
# (a dictionary with the key as the protein name -- I am using an
# OrderedDict so that the order is the same as in the TPR)
from collections import OrderedDict
protein_fragments = OrderedDict((seg.segid[6:], seg.atoms.fragments) for seg in protein_segments)

# analyze trajectory (with a nice progress bar)
timeseries = []
for ts in mda.log.ProgressBar(u.trajectory):
    coms = []
    for name, proteins in protein_fragments.items():
        # loop over all the different proteins;
        # unwrap to get the true COM under PBC (double check!!)
        coms.extend([p.center_of_mass(unwrap=True) for p in proteins]) 
    timeseries.append(coms)
timeseries = np.array(timeseries)
OrderedDict([('EPHA', (<AtomGroup with 74 atoms>, <AtomGroup with 74 atoms>)),
           ('OMPA', (<AtomGroup with 307 atoms>, <AtomGroup with 307 atoms>)),
           ('OMPG', (<AtomGroup with 606 atoms>, <AtomGroup with 606 atoms>)),
           ('BTUB', (<AtomGroup with 1289 atoms>, <AtomGroup with 1289 atoms>)),
           ('ATPS', (<AtomGroup with 1918 atoms>, <AtomGroup with 1918 atoms>)),
           ('GLPF', (<AtomGroup with 2136 atoms>, <AtomGroup with 2136 atoms>)),
           ('FOCA', (<AtomGroup with 2685 atoms>, <AtomGroup with 2685 atoms>))])

Overwrite plot every epoch

copy iconCopydownload iconDownload
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
from keras.models import Sequential
from keras.layers import Dense
from numpy import asarray
from matplotlib import pyplot
import tensorflow

from IPython.display import clear_output

class myCallback(tensorflow.keras.callbacks.Callback):

    def on_epoch_end(self, epoch, logs=None):
        clear_output(wait=True)
        yhat = model.predict(x)
        # inverse transforms
        x_plot = scale_x.inverse_transform(x)
        y_plot = scale_y.inverse_transform(y)
        yhat_plot = scale_y.inverse_transform(yhat)
        # report model error
        print('MSE: %.3f' % mean_squared_error(y_plot, yhat_plot))
        # plot x vs y
        plt = pyplot.scatter(x_plot,y_plot, label='Actual')
        # plot x vs yhat
        pyplot.scatter(x_plot,yhat_plot, label='Predicted')
        pyplot.title('Input (x) versus Output (y)')
        pyplot.xlabel('Input Variable (x)')
        pyplot.ylabel('Output Variable (y)')
        pyplot.legend()
        pyplot.show()
        
# define the dataset
x = asarray([i for i in range(-50,51)])
y = asarray([i**3 for i in x])
print(x.shape)
print(x.min(), x.max(), y.min(), y.max())
# reshape arrays into into rows and cols
x = x.reshape((len(x), 1))
y = y.reshape((len(y), 1))
# separately scale the input and output variables
scale_x = MinMaxScaler()
x = scale_x.fit_transform(x)
scale_y = MinMaxScaler()
y = scale_y.fit_transform(y)
print(x.min(), x.max(), y.min(), y.max())
# design the neural network model
model = Sequential()
model.add(Dense(64, input_dim=1, activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(16, activation='relu'))
model.add(Dense(1))
opt = tensorflow.keras.optimizers.Adam(learning_rate=0.01)
# define the loss function and optimization algorithm
model.compile(loss='mse', optimizer=opt)
# ft the model on the training dataset
model.fit(x, y, epochs=50, batch_size=10, verbose=0, callbacks=[myCallback()])
# make predictions for the input data

How to customize the background image of an Ionic 5 app?

copy iconCopydownload iconDownload
ion-content{
    --background: 
url('../assets/images/a_2020_in_front_of_the_orchestra.jpg') no-repeat 
center/cover;
}

ion-content.ion-color-secondary{
        --ion-color-base: none !important;
}

Specific plain English keywords returning specific numerical values using google sheets app script

copy iconCopydownload iconDownload
var rate2 = 0;
-----------------------
return (input * sugar);
return (input * rate);
...
switch (sugar.toLowerCase()) {
  // it will catch 'caster sugar' and 'Caster Sugar' and 'CASTER SUGAR', etc
  case 'caster sugar': rate = 1.0; 
  break;
...
function sugarcalc(input, sugar) {
    var sugar = sugar.toLowerCase() // convert to lower case 
        .trim()                     // remove spaces at the start and at end
        .replace(/ +/g, ' ');       // replaces double spaces with single spaces
    return input * get_rate(sugar);


    function get_rate(sugar) {

        // multi conditions
        var texts = ['caster sugar', 'sugar', 'granulated sugar'];
        if (texts.includes(sugar))      return 1.00;

        var texts = ['gomme', 'agave syrup', 'maple syrup'];
        if (texts.includes(sugar))      return 0.68;

        // single conditions
        if (sugar == 'honey')           return 0.82;
        if (sugar == '2:1 honey syrup') return 0.55;
        if (sugar == '1:1 honey syrup') return 0.41;
        if (sugar == 'invert syrup')    return 0.70;
        if (sugar == '2:1 sugar syrup') return 0.67;
        if (sugar == '3:2 sugar syrup') return 0.60;
        if (sugar == '1:1 sugar syrup') return 0.50;
        if (sugar == 'rice malt syrup') return 0.55;

        return 0; // default rate
    }
}

// tests
console.log(sugarcalc(2, 'Sugar'));               // --> 2
console.log(sugarcalc(2, '  Sugar'));             // --> 2
console.log(sugarcalc(1, '2:1 Honey Syrup'));     // --> 0.55
console.log(sugarcalc(1, '2:1  HONEY   Syrup'));  // --> 0.55
console.log(sugarcalc(3, 'Granulated Sugar'));    // --> 3
console.log(sugarcalc(3, 'Granulated sugar  '));  // --> 3
console.log(sugarcalc(3, 'Gomme'));               // --> 2.04
-----------------------
return (input * sugar);
return (input * rate);
...
switch (sugar.toLowerCase()) {
  // it will catch 'caster sugar' and 'Caster Sugar' and 'CASTER SUGAR', etc
  case 'caster sugar': rate = 1.0; 
  break;
...
function sugarcalc(input, sugar) {
    var sugar = sugar.toLowerCase() // convert to lower case 
        .trim()                     // remove spaces at the start and at end
        .replace(/ +/g, ' ');       // replaces double spaces with single spaces
    return input * get_rate(sugar);


    function get_rate(sugar) {

        // multi conditions
        var texts = ['caster sugar', 'sugar', 'granulated sugar'];
        if (texts.includes(sugar))      return 1.00;

        var texts = ['gomme', 'agave syrup', 'maple syrup'];
        if (texts.includes(sugar))      return 0.68;

        // single conditions
        if (sugar == 'honey')           return 0.82;
        if (sugar == '2:1 honey syrup') return 0.55;
        if (sugar == '1:1 honey syrup') return 0.41;
        if (sugar == 'invert syrup')    return 0.70;
        if (sugar == '2:1 sugar syrup') return 0.67;
        if (sugar == '3:2 sugar syrup') return 0.60;
        if (sugar == '1:1 sugar syrup') return 0.50;
        if (sugar == 'rice malt syrup') return 0.55;

        return 0; // default rate
    }
}

// tests
console.log(sugarcalc(2, 'Sugar'));               // --> 2
console.log(sugarcalc(2, '  Sugar'));             // --> 2
console.log(sugarcalc(1, '2:1 Honey Syrup'));     // --> 0.55
console.log(sugarcalc(1, '2:1  HONEY   Syrup'));  // --> 0.55
console.log(sugarcalc(3, 'Granulated Sugar'));    // --> 3
console.log(sugarcalc(3, 'Granulated sugar  '));  // --> 3
console.log(sugarcalc(3, 'Gomme'));               // --> 2.04
-----------------------
return (input * sugar);
return (input * rate);
...
switch (sugar.toLowerCase()) {
  // it will catch 'caster sugar' and 'Caster Sugar' and 'CASTER SUGAR', etc
  case 'caster sugar': rate = 1.0; 
  break;
...
function sugarcalc(input, sugar) {
    var sugar = sugar.toLowerCase() // convert to lower case 
        .trim()                     // remove spaces at the start and at end
        .replace(/ +/g, ' ');       // replaces double spaces with single spaces
    return input * get_rate(sugar);


    function get_rate(sugar) {

        // multi conditions
        var texts = ['caster sugar', 'sugar', 'granulated sugar'];
        if (texts.includes(sugar))      return 1.00;

        var texts = ['gomme', 'agave syrup', 'maple syrup'];
        if (texts.includes(sugar))      return 0.68;

        // single conditions
        if (sugar == 'honey')           return 0.82;
        if (sugar == '2:1 honey syrup') return 0.55;
        if (sugar == '1:1 honey syrup') return 0.41;
        if (sugar == 'invert syrup')    return 0.70;
        if (sugar == '2:1 sugar syrup') return 0.67;
        if (sugar == '3:2 sugar syrup') return 0.60;
        if (sugar == '1:1 sugar syrup') return 0.50;
        if (sugar == 'rice malt syrup') return 0.55;

        return 0; // default rate
    }
}

// tests
console.log(sugarcalc(2, 'Sugar'));               // --> 2
console.log(sugarcalc(2, '  Sugar'));             // --> 2
console.log(sugarcalc(1, '2:1 Honey Syrup'));     // --> 0.55
console.log(sugarcalc(1, '2:1  HONEY   Syrup'));  // --> 0.55
console.log(sugarcalc(3, 'Granulated Sugar'));    // --> 3
console.log(sugarcalc(3, 'Granulated sugar  '));  // --> 3
console.log(sugarcalc(3, 'Gomme'));               // --> 2.04
-----------------------
return (input * sugar);
return (input * rate);
...
switch (sugar.toLowerCase()) {
  // it will catch 'caster sugar' and 'Caster Sugar' and 'CASTER SUGAR', etc
  case 'caster sugar': rate = 1.0; 
  break;
...
function sugarcalc(input, sugar) {
    var sugar = sugar.toLowerCase() // convert to lower case 
        .trim()                     // remove spaces at the start and at end
        .replace(/ +/g, ' ');       // replaces double spaces with single spaces
    return input * get_rate(sugar);


    function get_rate(sugar) {

        // multi conditions
        var texts = ['caster sugar', 'sugar', 'granulated sugar'];
        if (texts.includes(sugar))      return 1.00;

        var texts = ['gomme', 'agave syrup', 'maple syrup'];
        if (texts.includes(sugar))      return 0.68;

        // single conditions
        if (sugar == 'honey')           return 0.82;
        if (sugar == '2:1 honey syrup') return 0.55;
        if (sugar == '1:1 honey syrup') return 0.41;
        if (sugar == 'invert syrup')    return 0.70;
        if (sugar == '2:1 sugar syrup') return 0.67;
        if (sugar == '3:2 sugar syrup') return 0.60;
        if (sugar == '1:1 sugar syrup') return 0.50;
        if (sugar == 'rice malt syrup') return 0.55;

        return 0; // default rate
    }
}

// tests
console.log(sugarcalc(2, 'Sugar'));               // --> 2
console.log(sugarcalc(2, '  Sugar'));             // --> 2
console.log(sugarcalc(1, '2:1 Honey Syrup'));     // --> 0.55
console.log(sugarcalc(1, '2:1  HONEY   Syrup'));  // --> 0.55
console.log(sugarcalc(3, 'Granulated Sugar'));    // --> 3
console.log(sugarcalc(3, 'Granulated sugar  '));  // --> 3
console.log(sugarcalc(3, 'Gomme'));               // --> 2.04

INSERT SQL records from one database to a second (where 2nd has an additional column)

copy iconCopydownload iconDownload
INSERT INTO B_Table (col1, col2, col3) 
SELECT col1, col2, 'NewInfo' 
FROM A_Table;

Community Discussions

Trending Discussions on ion
  • Split a dataframe column containing delimited strings into multiple columns and retain specific portions of the split strings
  • How to toggle two icons in v-for list item in Vue
  • CSS how to prevent keyboard from shifting content up?
  • Remove text which is displayed on bars in plotly bar chart
  • How can I make a Shiny app W3C compliant?
  • How to calculate center of mass of proteins using MDAnalysis?
  • Overwrite plot every epoch
  • How to customize the background image of an Ionic 5 app?
  • Having error Uncaught RangeError: Maximum call stack size exceeded, when trying to close popover in IONIC+VUE(with vuex)
  • Different behaviour between ion-tab tab attribute and ion-fab routerLink
Trending Discussions on ion

QUESTION

Split a dataframe column containing delimited strings into multiple columns and retain specific portions of the split strings

Asked 2022-Apr-16 at 11:43

I have a dataframe df which contains a single column GO. Each row in df contains either one term or multiple terms (separated by ;) and each term has a specific format - it starts with either P, C or F and is followed by a : and then the actual term.

df <- data.frame(
  GO = c("C:mitochondrion; C:kinetoplast", "", "F:calmodulin binding; C:cytoplasm; C:axoneme",
     "", "P:cilium movement; P:inner dynein arm assembly; C:axoneme", "", "F:calcium ion binding"))


                                                         GO
1                            C:mitochondrion; C:kinetoplast
2                                                          
3              F:calmodulin binding; C:cytoplasm; C:axoneme
4                                                          
5 P:cilium movement; P:inner dynein arm assembly; C:axoneme
6                                                          
7                                     F:calcium ion binding

I want to split this column into three columns BP, CC, MF based on whether the terms start with a P, C or an F respectively. Also I want the three columns to have only the terms and not the other identifiers (P, C, F and :).

This is what I want my new dataframe to look like:

                                          BP                         CC                  MF
1                                            mitochondrion; kinetoplast                    
2                                                                                          
3                                                    cytoplasm; axoneme  calmodulin binding
4                                                                                          
5 cilium movement; inner dynein arm assembly                    axoneme                    
6                                                                                          
7                                                                       calcium ion binding

ANSWER

Answered 2022-Apr-16 at 07:52

A tidyverse approach to achieve your desired result may look like so:

library(tidyr)
library(dplyr)

df %>%
  mutate(id = seq(nrow(.))) %>%
  separate_rows(GO, sep = ";\\s") %>%
  separate(GO, into = c("category", "item"), sep = ":") %>%
  mutate(category = recode(category, C = "CC", P = "BP", F = "MF", .default = "foo")) %>%
  replace_na(list(item = "")) %>%
  group_by(id, category) %>%
  summarise(items = paste(item, collapse = "; "), .groups = "drop") %>%
  pivot_wider(names_from = category, values_from = items, values_fill = "") %>%
  select(BP, CC, MF)
#> Warning: Expected 2 pieces. Missing pieces filled with `NA` in 3 rows [3, 7,
#> 11].
#> # A tibble: 7 × 3
#>   BP                                           CC                          MF   
#>   <chr>                                        <chr>                       <chr>
#> 1 ""                                           "mitochondrion; kinetoplas… ""   
#> 2 ""                                           ""                          ""   
#> 3 ""                                           "cytoplasm; axoneme"        "cal…
#> 4 ""                                           ""                          ""   
#> 5 "cilium movement; inner dynein arm assembly" "axoneme"                   ""   
#> 6 ""                                           ""                          ""   
#> 7 ""                                           ""                          "cal…

Source https://stackoverflow.com/questions/71891941

Community Discussions, Code Snippets contain sources that include Stack Exchange Network

Vulnerabilities

No vulnerabilities reported

Install ion

You can download it from GitHub, Maven.
You can use ion like any standard Java library. Please include the the jar files in your classpath. You can also use any IDE and you can run and debug the ion component as you would do with any other Java program. Best practice is to use a build tool that supports dependency management such as Maven or Gradle. For Maven installation, please refer maven.apache.org. For Gradle installation, please refer gradle.org .

Support

For any new features, suggestions and bugs create an issue on GitHub. If you have any questions check and ask questions on community page Stack Overflow .

DOWNLOAD this Library from

Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
over 430 million Knowledge Items
Find more libraries
Reuse Solution Kits and Libraries Curated by Popular Use Cases

Save this library and start creating your kit

Share this Page

share link
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
over 430 million Knowledge Items
Find more libraries
Reuse Solution Kits and Libraries Curated by Popular Use Cases

Save this library and start creating your kit

  • © 2022 Open Weaver Inc.