 Japanese scientists recently got one to solve a small maze, through cells self-organising. They communicate by secreting pheromones.
But we are not slime mold!
We don't think rationally, unless we're autistic. Our subconscious follows a first-fit (not best-fit) pattern matching algorithm based on past experience, which the conscious mind rationalises according to the dominant discourse. Our ancestors saw danger and ran; to do this fast, evolution optimised to bypass the conscious mind.
What is self-organisation? Amongst primates, it's the fight for alpha-male dominance: probably not the kind of self-organisation we want unless you're the alpha. What are the models to understand how teams work?
(Discussion exercise around how far we let a team self-organise)
There are 2 general directions to the questions Joseph placed on the board: type X personality (believes "most people are lazy, leave them alone and they'll do nothing"), and type Y (believes "working can be like learning, and fun, people left to their own devices will achieve great things").
One issue in getting a team to self-organise is letting them do this. One direction to take is making small changes and seeing how they go.
RUP: "the sound a project makes when it crashes against a wall".
RUP has a built-in mechanism: if it goes wrong, you got the process wrong. There's a similar problem with self-organisation: an organisation that doesn't work right is the fault of bad management. There is a theory: what if the organisation is dysfunctional but still doing what it needs to do? Most companies say "the customer comes first"; rubbish, the CEO does in practice!
The theory is that the main purpose of any organisation is to provide for the needs and desires of a group of people in that organisation. Look at AIG: got government bailout then sent its managers on a half-million dollar retreat. We need to get support at a high level when bringing agile in.
I propose to take this idea a step further: if you have a dysfunctional team, what would they be if they were doing exactly what they should be doing? Kurt Levin, the father of social psychology, theorises that
B = f(P,E)
i.e. behaviour is a function of a person and their environment. He tried to explain psychological interactions in terms of the mathematics of topology. We talk about self-organisation, but who or what is the self? Self-organisation of a system is the interactions between the agents of a system.
For example, at Christmas our 25y.o. son is visiting. My wife treats him like a child, but tries not to. The system has defined a set of roles that need to be played; we will gravitate to acting out these roles.
In a team, we play roles. Remove the pessimist from a team, and someone else takes up the role. It goes further: there are ghost roles. Ever get the feeling in a meeting that people are being careful about what they say, that there's someone else in the room?
These roles get set up by a self-organisational process. How do we get to a point where the fight for alpha-maleness doesn't dominate this process?
The answer lies in chicken soup: made from all sorts of ingredients. You need more than ingredients though, you need heat. For most people who aren't chefs, heat is boolean. A good cook learns to play with heat. To make people a good team, you need to do the same, to effect a change from outside - without working directly with them.
Consider these stages in the cooking analogy:
The trick with self-organisation: determining where the team is now, what models can we use for them, what can we do with these?
So, looking at models, the equation for gas in a confined space:
PV = mRT
T: temperature
R: a constant, forget it
m: molecules of gas in the enclosed area
P: pressure
V: volume
Compress the gas and temperature rises. Increase amount of gas and the same happens. This gives us two easily understood variables: the size of our timebox and the number of tasks we have to do. With a large timebox and 1 task, there's not much stress. With 30-40 tasks there's more stress. Similarly if the number of tasks is fixed and the size of the timebox increased, people get more relaxed. Parkinsons law: tasks grow to fill the size of the time available.
The temperature is proportional to the number of people in your team: its' easier to stress out 1 person than a team of 20.
Teams will naturally cool down and stagnate. There's a need for constant "heating" (coaching). Capacity-based planning is great, but even if you only commit to a subset of overall work in a given sprint, there's more heat: the team are aware there's more to do.
Creative use of conflict can create heat. In a football team you have 26 on the roster and 11 on the field. Only those on the field get lots of the benefits of being on the team: coaches know this and use this to motivate.
(Exercise on how we view conflict)
Another model from a psychologist who invented the term "flow": being in a state where you're on with yourself and your work. Every person has a set of skills, and meets challenges. When skills and challenges are in balance, you're in flow.  If challenges are more difficult than skills, you feel anxious. If they're too easy, you get bored.
Challenge: your developers find the daily stand-ups boring. To motivate them, raise the challenge level.
The passive version of this is the Peter Principle: people are promoted beyond their level of competence.
(part 2)
Not all individuals are at the same point. We work on plotting activities and people on the skills/challenge matrix. Joseph theorises that people need to move around across the matrix.
Shows the classic Gorilla/basketball video.
Types of power: reward, coercive, legitimate, expert, referent.
Lots of complexity here, we're playing with many values. So we can't predict the outcome of changes. We need to implement small changes and make decisions based on empirical data. Probe, sense, respond. Inspect and adapt. We can't have fail-safe... we need safe-fail!


A realtime visualisation of the Covid-19 (Corona) virus; cases & deaths. ☝ ↝ click/drag/zoom the globe to view different regions.


d_b
H0me
Ab0ut
Pr0jects
Bl0g
>
Daiane Bushey
Studied Philosophy at
USP
.
Studying Emerging Media at
CityTech
.
Often found in
Bushwick
.


This site is in high load. Before access the site, you should type the correct letters you see below.


Geography
The study of Earth's landforms is called physical geography. Landforms can be mountains and valleys. They can also be glaciers, lakes or rivers. Landforms are sometimes called physical features. It is important for students to know about the physical geography of Earth. The seasons, the atmosphere and all the natural processes of Earth affect where people are able to live. Geography is one of a combination of factors that people use to decide where they want to live.
Water
Fresh water sources also influence where people settle. People need water to drink. They also need it for washing. Throughout history, people have settled near fresh water. Living near a water source helps ensure that people have the water they need.
Mountain Ranges
The physical features of a region are often rich in resources. Within a nation, mountain ranges become natural borders for settlement areas. In the U.S., major mountain ranges are the Sierra Nevada, the Rocky Mountains, and the Appalachians.


Kiernan loves slow life in fast London
Cavan native Leanne Kiernan is blending right in as part of West Ham United’s foreign legion.
The Cavan native 20-year-old Ireland women’s international is now in her second season at the English top-flight outfit which has developed a policy of recruiting from abroad.
An insight into the club’s approach was revealed earlier this year in a behind-the-scenes television documentary featuring Jack Sullivan, son of the club’s co-owner David Sullivan.
Snaffling bargains from overseas represents the value-for-money option, as evidenced by an early move for Cavan native Kiernan.
The striker had just broken into the Ireland senior team on the back of her hat-trick in the FAI Cup final and was attracting interest from various football powerhouses.
Relocating from the rural setting of her family pig farm in Bailieborough to the bright lights of London was a challenge for Kiernan, but it’s one she wasn’t meeting alone.
“Only two of the players in our squad are English; the rest of us are foreign,” she says, back home preparing for Tuesday’s trip with Ireland to Greece.
“This is my second year at the club and our manager Matt Beard strengthened the squad in pre-season with a lot of additions from abroad.
“Now we have German, Dutch, French, Norwegian, Canadian, and American players. The captain of South Korea, Cho So-hyun, is also with us.
“I live with three of them, including the American goalkeeper Courtney Brosnan, who plays for Ireland.
“It was difficult moving away from home so young because everything was done by my family.
“I had to catch up with learning to cook, but am well used to it now.
“I’ve made lots of lifelong friends. It’s great craic, as we definitely have the best banter.
“We don’t really discuss football at home, much preferring to relax by going for coffee and a piece of cake.
“We are not in the rush of London City, which for someone like me coming from Cavan, is nice.
“I’ve my car over there, so I can potter around the place and drive towards the country.”
Along those journeys, Kiernan’s mind could wander into her first real challenge at international level.
Although she was the star of Colin Bell’s side in the last campaign, breaking into the side as his main striker, new boss Vera Pauw last month caused a surprise by dropping her for the crunch Euro qualifier against Ukraine.
She had no reason to complain as her replacement Rianna Jarrett scored one and created another in the 3-2 victory over the group’s second seeds.
Given the Hammers star’s ability to occupy a wing role, she could return to the starting line-up in Tuesday’s third qualifier of the campaign in Greece.
Ireland will be favourites to rack of their third win of the campaign on the spin and so chart a course for at least a play-off in their bid to reach the 2021 finals.
“Vera made the right decision to start Rianna in the last game,” Kiernan said of the trip to Athens.
“I came on in the second half and Vera called me up afterwards.
“She said the intention was to bring me on for Rianna at half time and I said: ‘Why would you take her off when she was doing so well?’
We need to beat Greece to qualify and I’d be willing to play anywhere — even in goal!
“This is our best chance of becoming the first Ireland team to qualify for a major tournament.
“People are on about Germany hammering everybody in the group, but realistically, that’s not the point.
“The bigger picture is us having to beat Greece, Ukraine and Montenegro.
“If we don’t get goals and wins against them, then everything else is irrelevant, as we won’t qualify.”


Python was born as a programming language the same year that Taylor Swift was born. The year was 1989. This makes Python older than Java, R, Javascript and Ariana Grande (Wood pars. 1-2).
There was a man named Guido van Rossum who was responsible for all this. It all started however, as an innocuous hobby. He did not name it after the famous snake, the reticulated python. He named it after Monty Python, as he was a fan of the British mode of slapstick comedy (Wood par. 2)
Python become a very popular language because of its ability to utilize different coding libraries and file formats (Wood par. 4).
Python is a good language for a coding novice like Tran. For instance, Python 2.0 became more open source so that more people could work on it or fix bugs. Python 3 simplified the whole structure of the language and was a controversial overhaul, as it was not backwards compatible (Wood pars 6 - 8).
Wood, Sam. A Brief History of Python. Packt. Packt Publishing, LTD. 2015 Oct. 04. LINK 2018 Nov. 11.
{% endblock %}


Welcome! We are very pleased you want to contribute to the docs for Kubernetes.
Click the below link to edit the page you were just on. When you are done, press "Commit Changes" at the bottom of the screen. This will create a copy of our site on your GitHub account called a "fork." You can make other changes in your fork after it is created, if you want. When you are ready to send us all your changes, go to the index page for your fork and click "New Pull Request" to let us know about it.
Click the below button to visit the repo for our site. You can then click the "Fork" button in the upper-right area of the screen to create a copy of our site on your GitHub account called a "fork." Make any changes you want in your fork, and when you are ready to send those changes to us, go to the index page for your fork and click "New Pull Request" to let us know about it.
If you want to see your changes staged without having to install anything locally, change your fork of our repo to be named:
YOUR_GITHUB_USERNAME.github.io
Then, visit: http://YOUR_GITHUB_USERNAME.github.io
You should see a special-to-you version of the site.
If you want to work offline, run the below commands to setup your environment for running GitHub pages locally. Then, any edits you make will be viewable on a lightweight webserver that runs on your local machine.
First install rvm
\curl -sSL https://get.rvm.io | bash -s stable
Then load it into your environment
source /Users/(USERNAME)/.rvm/scripts/rvm (or whatever is prompted by the installer)
Then install Ruby 2.2 or higher
rvm install ruby-2.2.4
rvm use ruby-2.2.4 --default
Verify that this new version is running (optional)
which ruby
ruby -v
Install the GitHub Pages package, which includes Jekyll:
gem install github-pages
Clone our site
git clone https://github.com/kubernetes/kubernetes.github.io.git
Then, to see it run locally:
cd kubernetes.github.io
jekyll serve
Your copy of the site will then be viewable at: http://<IP_ADDRESS>:4000 (or wherever Ruby tells you).
If you’re a bit rusty with git/GitHub, you might wanna read this for a refresher.
The above instructions work on Mac and Linux. Windows users, follow these instructions.
Kubernetes thrives on community participation and we really appreciate your contributions to our site and our documentation!


Client Search
Report
Logout
Client Search
Last Name (first two letters)
City of Birth (first two letters)
Date of Birth
Sex at Birth
Select one
Female
Male
Intersex
Other
Gender
Select one
Female
Male
Non-binary
Other
Ethnicity
Select one
Hispanic/Latino
Non-Hispanic/Latino
Other
Race
Select one
Black/African American
Asian
Native Hawaiian/Pacific Islander
American Indian/Alaskan Native
White
Multiracial
Zip Code
Search
Add Client
Internal Server Error


Please enter the token for this solution to view it:
If you are the assignment administrator or tutor, enter the assignment token here:
Please enter the token for this assignment to view solutions:


Goal Oriented Action Planning (GOAP for short) is an Artificial Intelligence system where a agent has a list of actions that they can perform, when given a goal the agent will find the best plan using those actions to acheive the goal.
Templated world values
I needed a light weight Variant type so I could store a list of different typed values in my WorldState, for this I used inheritance with a interface and templating. Source File
Cyclic graph in planning stage
When planning the GOAP planner looks at every action that can be performed on the current world state and creates a graph node for that resulting world state, then adds an edge with the action performed.
This process is repeated on every resulting world state and for any reoccurring world states the a node is not added but the existing node with that world state is connected instead.
Dijkstra's to find the best plan
Once the graph is created I use Dijkstra's to search and find the path of actions that results in a goal meeting world state.
Send me an email and I will get back to you as soon as possible!


Thanks for this site and all the hard work and contributions. I stumbled on it (well google) while looking for alternatives to the commercial TED and Brultech products.
Now my question. I noticed that your solution uses Arduino to bit bang/sample current and voltage, etc and then one typically feeds it to a linux box like a PiRaspberry to log (store) the data, serve the data, or otherwise analyze, present...
Good plan -- BUT - how about using one off-the-shelf little computer to do both?
The pcDuino seems a good bet. My question is whether I'll be able to poll the ADCs reliably and consistently enough. The preferred software for pcDuino is Linux - which I'm very familiar with - except in the domain of using it for real-time monitoring. I would hope that since this will be a dedicated little box that will not usually be running heavy graphics - and won't be servicing interrupts except as needed to collect data and serve that data - I could get "away" with a simple polling program that sleeps between polls and periodically reads a real-time clock to synchronize itself.
Thoughts? Comments? Already BTDoneThat?
Re: pcDuino / arduino Due - 32 bit processors for energy monitoring and control
"My question is whether I'll be able to poll the ADCs reliably and consistently enough." That's one good question, and it's pretty important that all the samples are regularly spaced in time, else the rms calculations will be wrong. The other question is how often can you sample all the inputs and convert the values to make them available to a program? Bear in mind there are only 4 inputs that are usable - the 6-bit channels don't really cut it when we struggle for resolution with the 10-bit Arduino inputs. We manage about 50 sample pairs per mains cycle with the Atmel 328P, which is enough to give good accuracy with all reasonably distorted/chopped current waveforms. Unless you can do at least 30, accuracy will suffer.
Re: pcDuino / arduino Due - 32 bit processors for energy monitoring and control
Doing some more "research" via Google, Ebay, and Amazon -- and looking more at your great website -- seems to me like Arduino Due is the way I'll go. boredomProjects.net has already blazed the trail - so hardware-wise I'll just be following his lead. Professionally I work on a project that is hundreds of thousands of lines of C++ code, so comparatively the energy specific Arduino code for the energy meter is a small piece of cake - you guys have figured out a workable, practical way to do the signal processing on the raw sensor data - that's the part of the software that would have been difficult for me alone.
With 12 analogue inputs, each with 12 bits of precision and and a 32bit ARM processor, not to mention all the digital I/O, the Arduino Due might be viewed as "overkill" - but given that a Chinese source on ebay sells if for less than $20US - why not? I haven't used 16 bit micros since the early days of the IBM PC (1980s) - so why go backwards when the ARM board is so cheap?
Looks like I can just push data from the Arduino to a local linux host (e.g. Rasp.Pi) via a USB cable - and from there on I know how or can find/adapt software to save, serve and/or plot the data, etc, etc.
Regarding serial output, I suggest you improve the OpenEnergyMonitor software so each EnergyMonitor object has a name or identity string field... So the serialprint() method can output that along with the readings. Should also output a timestamp with each round of polling the objects, or perhaps with each object reading Thus each output record is self identifying and a slightly smarter data logger and/or plotter can make sense of the data - and immediately display it in a meaningful way. Even better, output JSON or similar semi-standard format, so it's super-easy to parse the data stream.
(If you don't have true time of day clock onboard your Arduino collector, you can still tick off relative seconds and let the next stage collector adjust the relative time to an absolute UTC time)
In other words, come up with a standard way to tag the data with names and timestamps right at the Arduino collector - and then there less need to customize/configure the data collection software to do something sensible with the data.
Also, after you add sensors in the future, you can still look back and re-plot the old and new data together. For example, this year's HVAC energy consumption against last year's - even though you added some extra sensors this year. IOOW - think in terms of self describing, extensible database schemas.


Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but because occasionally circumstances occur in which toil.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Get the Job Done in 4 Steps
Upload Your Documents
Login to your account after signing up and upload your PDF document to be printed.
Select Printing Option
Select printing options like type of printing, colors, type of binding and delivery option.


The Home page is a simple landing page that shows you the name of the organization you have loaded, as well as different actions that you can take using the pre-installed apps in your organization. For example, in the organization
camino.aragonid.eth
we can perform the actions Assign Tokens, Vote, Check Finance, and New Payment.
In the menu on the top and left side of the screen, there are several features that you may find useful. Note that many of these features take advantage of the "local storage" in your browser, so if you clear your browser data then you may lose this data unless you make a backup.
The network connection indicator will tell you if the Aragon client you are using is connected to one of the supported networks or not (either Ethereum or Rinkeby). If the node your Aragon client is connected to is having any issues then the light will turn red and indicate that the connection has failed. If the node your Aragon client is connected to is working properly, then the light will turn green and indicate that the client is successfully connected to the network.
To use the Aragon client, you must first allow Aragon to access your Ethereum account. This will allow the Aragon client to send transactions to your Ethereum account for signing and to read information about your Ethereum account, such as the address and token balances. Click "Enable account" and approve the access request in your Ethereum provider to complete the process.
You can click on the organization name at the top of the screen and click the "star" icon next to it to add the organization to your favorites. Then even if you go to another organization, you can click on the organization name and see your list of favorites that you can easily navigate to.
Click the "alarm bell" icon to see the status of any transactions you have made using Aragon. You can clear the status history by clicking the "Clear history" button once you have made a transaction.
Click the "gear" icon to manage your global preferences. These preferences will be saved locally and used across every Aragon organization you use.
Custom labels
Click on any Ethereum address throughout the Aragon client to give it a custom label, such as the name of the person or organization that owns the address. These labels will then show up in your global preferences under the Custom Labels tab. You can import a list of labels provided by someone else, and also export or any labels you have created. Make sure to export your labels from time to time to ensure you have a backup in case the local storage in your browser where the labels are stored is accidentally or intentionally cleared.
Network
The Network tab of your global settings shows what Ethereum and IPFS nodes you are currently connected to. You can modify these settings to use any Ethereum or IPFS node you want, including nodes running locally on your own computer. Using Aragon with your own nodes has privacy and security benefits, and possibly performance benefits as well.
If you are having any issues using Aragon, a common troubleshooting method is to clear your application cache. There's a button in the Network tab that makes this easy to do. Make sure to export a backup of your custom labels before you clear your application cache, or else you will lose all of your custom labels.
Notifications
You can opt-in to email notifications about activity in organizations that you are interested in on the Notifications tab of your global preferences. Enter your email address and then click the activation link in your email to sign up. Then you can add "actions" in your organization that you want to get notified about whenever they happen.
Help and feedback
The "Help and feedback" tab of your global preferences gives you the option to enable or disable the Help Scout module that shows up as a question mark inside a circle in the bottom-right corner throughout the client.
If you need help at any time, you can click the HelpScout module, opt-in to connecting to HelpScout and loading the module, then search for user documentation or create a support ticket right inside the Aragon client. If you prefer not to load the HelpScout module, you can find the documentation or create a support ticket at help.aragon.org.
Click on the System text in the sidebar to reveal the System apps that come with every Aragon organization template by default.


6 Manipulating Data with dplyr
(Continuation)
6.1 Grouping & Summarising
Please load the following libraries and data frames for this chapter:
library(tidyverse)
library(magrittr)
<- "http://www.phonetik.uni-muenchen.de/~jmh/lehre/Rdf"
url <- read.table(file.path(url, "intdauer.txt"))
int <- read.table(file.path(url, "coronal.txt"))
coronal <- read.table(file.path(url, "vdata.txt")) vdata
Chapter 5 was concerned with summary statistics regarding the F1 values stored in the data frame vdata
. Of course we can calculate these values just as well using the tidyverse syntax. This is actually what the function summarise()
from the package dplyr
was made for. This function changes that data frame completely because the original observations are summarised to new, descriptive values. The columns of the original data are also usually dropped and new columns containing the calculated values are created. The function takes as arguments the new column names and a function with which the values for the new column shall be calculated:
%>% summarise(arith_mean = mean(F1)) vdata
## arith_mean
## 1 407.3
The output of this pipe is a data frame of just one column called arith_mean
and one observation which contains the arithmetic mean of vdata$F1
. We can also compute several summary statistics within one call of summarise()
, which results in a data frame with more columns:
%>% summarise(arith_mean = mean(F1),
vdata std_dev = sd(F1),
s = sum(F1),
maximum = max(F1),
Q1 = quantile(F1, 0.25))
## arith_mean std_dev s maximum Q1
## 1 407.3 145.8 1214532 1114 300
The functions mutate()
and summarise()
have in common that they create new columns from the old ones. However, while mutate()
keeps all original columns and observations, summarise()
creates a new data frame with usually less columns and observations than before.
Say, you want to compute the arithmetic mean of F1 for a specific vowel V
in the data frame vdata
– how would you do that? Using tidyverse, probably like this (for the vowel V == "E"
):
%>%
vdata filter(V == "E") %>%
summarise(arith_mean = mean(F1))
## arith_mean
## 1 426.2
The mean F1 for “E” is approx. 426 Hz. If you’re interested in the vowel-specific mean F1 values, it is very inefficient to rerun the code above for every single vowel category in the data frame. Instead, you can use the function group_by()
which takes as arguments the names of all columns by which you want to group the result of the code. summarise()
computes the desired summary statistics then per group. In our example, let’s compute the mean for each vowel:
%>%
vdata group_by(V) %>%
summarise(arith_mean = mean(F1))
## # A tibble: 7 × 2
## V arith_mean
## <chr> <dbl>
## 1 % 424.
## 2 A 645.
## 3 E 426.
## 4 I 311.
## 5 O 434.
## 6 U 304.
## 7 Y 302.
This code created two columns: one contains the seven distinct vowel from the original data frame, the second the vowel-specific mean F1 values. Of course you can group the results by more than one column. It is, for instance, probably the case that the mean F1 is not just different for each vowel, but that the tenseness Tense
of the vowel also affects F1. That is why we group now by vowel and tenseness and then compute the mean F1:
%>%
vdata group_by(V, Tense) %>%
summarise(arith_mean = mean(F1))
## `summarise()` has grouped output by 'V'. You can
## override using the `.groups` argument.
## # A tibble: 14 × 3
## # Groups: V [7]
## V Tense arith_mean
## <chr> <chr> <dbl>
## 1 % + 368.
## 2 % - 479.
## 3 A + 668.
## 4 A - 622.
## 5 E + 363.
## 6 E - 488.
## 7 I + 276.
## 8 I - 346.
## 9 O + 348.
## 10 O - 520.
## 11 U + 259.
## 12 U - 348.
## 13 Y + 266.
## 14 Y - 338.
Now we can see the mean F1 for lax “%”, tense “%” (ignore the weird vowel encoding), lax “A”, tense “A” and so on.
Further Information: summarise()
warning
Above you can see a warning that was thrown by the summarise()
command. Warnings try to get your attention – don’t ignore them! This specific warning shows that the result of the pipe is a grouped data frame (object class grouped_df
) and that V
is the grouping variable:
%>%
vdata group_by(V, Tense) %>%
summarise(arith_mean = mean(F1)) %>%
class()
## `summarise()` has grouped output by 'V'. You can
## override using the `.groups` argument.
## [1] "grouped_df" "tbl_df" "tbl" "data.frame"
The warning also tells you that you can the change the grouping of the results by using the function’s argument .groups
. This argument can take on different values as you can read on the help page for summarise()
.
In the previous code snippets in which we used group_by()
together with summarise()
the warning didn’t show up because we grouped by only one variable; thus the grouping is removed automatically in the results.
Importantly, you can only use group_by()
on categorial columns, i.e. factors. It makes no sense to use grouping on non-categorical, numeric columns because there are no groups there (rather, every value in a numeric column is unique or at least rare). We, on the other hand, want to calculate summary statistics for categorical groups.
Lastly we want to introduce the function n()
and n_distinct()
. n()
takes no arguments and is used within summarise()
and after group_by()
to return the number of observations (rows) per group. n_distinct()
takes the name of one column as an argument and finds out how many distinct (unique) values of a variable there are per group.
# number of rows for every combination of V and Tense
%>%
vdata group_by(V, Tense) %>%
summarise(count = n())
## `summarise()` has grouped output by 'V'. You can
## override using the `.groups` argument.
## # A tibble: 14 × 3
## # Groups: V [7]
## V Tense count
## <chr> <chr> <int>
## 1 % + 212
## 2 % - 214
## 3 A + 214
## 4 A - 218
## 5 E + 210
## 6 E - 215
## 7 I + 210
## 8 I - 214
## 9 O + 214
## 10 O - 214
## 11 U + 208
## 12 U - 215
## 13 Y + 211
## 14 Y - 213
# number of unique participants `Vpn` per region and social class
%>%
coronal group_by(Region, Socialclass) %>%
summarise(count = n_distinct(Vpn))
## `summarise()` has grouped output by 'Region'. You can
## override using the `.groups` argument.
## # A tibble: 9 × 3
## # Groups: Region [3]
## Region Socialclass count
## <chr> <chr> <int>
## 1 R1 LM 40
## 2 R1 UM 30
## 3 R1 W 11
## 4 R2 LM 26
## 5 R2 UM 18
## 6 R2 W 36
## 7 R3 LM 22
## 8 R3 UM 31
## 9 R3 W 26
Further Information: Describing functions unambiguously
Since functions from the tidyverse, especially from dplyr
, have pretty common names (filter()
, summarise()
, rename()
), they can be masked easily by functions of the same name from other packages. So if a function returns an error message, try re-loading the package of which the function you used is a part, or use the following notation: dplyr::filter()
.
6.2 Arranging
In your everyday work with data frames it can be useful to arrange the data frame with regard to rows and/or columns. Use arrange()
for sorting rows and relocate()
for sorting columns. Here we arrange the data frame int
in ascending order by duration Dauer
:
%>% arrange(Dauer) int
## Vpn dB Dauer
## 10 S2 25.60 55
## 5 S1 23.47 67
## 7 S2 30.08 81
## 14 S1 20.88 103
## 9 S1 21.37 116
## 2 S2 32.54 120
## 4 S2 28.38 131
## 13 S1 26.60 144
## 1 S1 24.50 162
## 6 S2 37.82 169
## 8 S1 24.50 192
## 15 S2 26.05 212
## 3 S2 38.02 223
## 12 S1 44.27 232
## 11 S1 40.20 252
arrange()
can also sort alphabetically and with regard to several columns:
%>% arrange(Vpn, Dauer) int
## Vpn dB Dauer
## 5 S1 23.47 67
## 14 S1 20.88 103
## 9 S1 21.37 116
## 13 S1 26.60 144
## 1 S1 24.50 162
## 8 S1 24.50 192
## 12 S1 44.27 232
## 11 S1 40.20 252
## 10 S2 25.60 55
## 7 S2 30.08 81
## 2 S2 32.54 120
## 4 S2 28.38 131
## 6 S2 37.82 169
## 15 S2 26.05 212
## 3 S2 38.02 223
To put a data frame in descending order, you can use desc()
within arrange()
:
%>% arrange(Vpn, desc(Dauer)) int
## Vpn dB Dauer
## 11 S1 40.20 252
## 12 S1 44.27 232
## 8 S1 24.50 192
## 1 S1 24.50 162
## 13 S1 26.60 144
## 9 S1 21.37 116
## 14 S1 20.88 103
## 5 S1 23.47 67
## 3 S2 38.02 223
## 15 S2 26.05 212
## 6 S2 37.82 169
## 4 S2 28.38 131
## 2 S2 32.54 120
## 7 S2 30.08 81
## 10 S2 25.60 55
relocate()
takes as arguments the names of all columns that are to be relocated. If you submit no further arguments, the columns are put in first place. Otherwise you can use the arguments .before
and .after
to specify the new location of the columns:
%>% slice(1) vdata
## X Y F1 F2 dur V Tense Cons Rate Subj
## 1 52.99 4.36 313 966 106.9 % - P a bk
%>% relocate(Subj) %>% slice(1) vdata
## Subj X Y F1 F2 dur V Tense Cons Rate
## 1 bk 52.99 4.36 313 966 106.9 % - P a
%>% relocate(Subj, Cons) %>% slice(1) vdata
## Subj Cons X Y F1 F2 dur V Tense Rate
## 1 bk P 52.99 4.36 313 966 106.9 % - a
%>% relocate(where(is.numeric), .after = Subj) %>% slice(1) vdata
## V Tense Cons Rate Subj X Y F1 F2 dur
## 1 % - P a bk 52.99 4.36 313 966 106.9
%>% relocate(where(is.character), .before = dur) %>% slice(1) vdata
## X Y F1 F2 V Tense Cons Rate Subj dur
## 1 52.99 4.36 313 966 % - P a bk 106.9


Contributing to this project
Please take a moment to review this document in order to make the contribution process easy and effective for everyone involved.
Following these guidelines helps to communicate that you respect the time of the developers managing and developing this open source project. In return, they should reciprocate that respect in addressing your issue or assessing patches and features.
Using the issue tracker
The issue tracker is the preferred channel for [bug reports](#bug-reports), [features requests](#feature-requests) and [submitting pull requests](#pull-requests), but please respect the following restrictions:
-
Please do not use the issue tracker for personal support requests (use [Stack Overflow](http://stackoverflow.com) with
ogham
tag). -
Please do not derail or troll issues. Keep the discussion on topic and respect the opinions of others.
Bug reports
A bug is a demonstrable problem that is caused by the code in the repository. Good bug reports are extremely helpful - thank you!
Guidelines for bug reports:
-
Use the GitHub issue search — check if the issue has already been reported.
-
Check if the issue has been fixed — try to reproduce it using the latest
master
or development branch in the repository. -
Isolate the problem — create a [reduced test case](http://css-tricks.com/reduced-test-cases/) and a live example.
A good bug report shouldn’t leave others needing to chase you up for more information. Please try to be as detailed as possible in your report. What is your environment ? What steps will reproduce the issue ? What OS/Java environment experience the problem ? What would you expect to be the outcome ? All these details will help people to fix any potential bugs.
Example:
Short and descriptive example bug report title
A summary of the issue and the OS/Java environment in which it occurs. If suitable, include the steps required to reproduce the bug.
This is the first step
This is the second step
Further steps, etc.
<url>
- a link to the reduced test caseAny other information you want to share that is relevant to the issue being reported. This might include the lines of code that you have identified as causing the bug, and potential solutions (and your opinions on their merits).
Feature requests
Feature requests are welcome. But take a moment to find out whether your idea fits with the scope and aims of the project. It’s up to you to make a strong case to convince the project’s developers of the merits of this feature. Please provide as much detail and context as possible.
Pull requests
Good pull requests - patches, improvements, new features - are a fantastic help. They should remain focused in scope and avoid containing unrelated commits.
Please ask first before embarking on any significant pull request (e.g. implementing features, refactoring code, porting to a different language), otherwise you risk spending a lot of time working on something that the project’s developers might not want to merge into the project.
Please adhere to the coding conventions used throughout a project (indentation, accurate comments, etc.) and any other requirements (such as test coverage).
Follow this process if you’d like your work considered for inclusion in the project:
-
[Fork](http://help.github.com/fork-a-repo/) the project, clone your fork, and configure the remotes:
```bash # Clone your fork of the repo into the current directory git clone https://github.com/<your-username>/<repo-name> # Navigate to the newly cloned directory cd <repo-name> # Assign the original repo to a remote called "upstream" git remote add upstream https://github.com/<upstream-owner>/<repo-name> ```
-
If you cloned a while ago, get the latest changes from upstream:
```bash git checkout <dev-branch> git pull upstream <dev-branch> ```
-
Create a new topic branch (off the main project development branch) to contain your feature, change, or fix:
```bash git checkout -b <topic-branch-name> ```
-
Commit your changes in logical chunks. Please adhere to these [git commit message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) or your code is unlikely be merged into the main project. Use Git’s [interactive rebase](https://help.github.com/articles/interactive-rebase) feature to tidy up your commits before making them public.
-
Locally merge (or rebase) the upstream development branch into your topic branch:
```bash git pull [--rebase] upstream <dev-branch> ```
-
Push your topic branch up to your fork:
```bash git push origin <topic-branch-name> ```
-
[Open a Pull Request](https://help.github.com/articles/using-pull-requests/) with a clear title and description.
IMPORTANT: By submitting a patch, you agree to allow the project owner to license your work under the same license as that used by the project.


The pie chart now has only 5 categories, and is much less cluttered. The information - that most countries have CO2 emissions less than 5 tons per person, and that only a few countries have very high per capita emissions, is now presented much more clearly.
in-context


service
Events
Recreation
Have Your Say
service
Events
Recreation
Have Your Say
Primary Box
Sencondary Box
Third Box