1

I have a dataset that lists different activities done in each day in a string array, similar concept asked here. Each activity is delimited and can easily be separated into columns, as I've had no problem doing in Excel.

activites
Work | family | date | gaming | relax | good sleep | shopping   
Work | family | date | Nature | Crusin | reading | gaming | relax | good sleep | cooking | laundry  
family | date | movies & tv | gaming | sport | relax | medium sleep | cooking   
Work | family | date | Photography | gaming | relax | good sleep | medium sleep | cooking   
Work | family | date | Nature | reading | gaming | relax | good sleep | cleaning    

What I am trying to do is make each activity into a boolean variable which has its own column as such, so it indicates 0 for not having done the activity on that day and 1 for having done the activity. It would look something like this:

Work   Family   Date   Gaming   Relax
1      1        0      1        0
1      1        1      0        0
0      0        1      0        1
  • Is your data in a pipe-separated file or is it already in a workbook ? – Gary's Student Jun 19 '20 at 00:25
  • @Gary'sStudent The full CSV uses commas for delimiters, but within the strings the pipes are used as delimiters between the different activities for each entry. The list of multiple activities are being treated as one variable currently. – milkmaximum Jun 19 '20 at 01:07
  • Could you share (part of) your csv or xlsx file? It will be easier to help you. I think this one is one of those events where the question is more difficult than the answer :) – Henrique Andrade Jun 22 '20 at 01:28

1 Answers1

0

So, what I ended up doing was using my knowledge of Java to reformat data. I first separated the activities into their own variables, each containing a numerical (binary) value to indicate whether or not that activity had been done that day. I had to treat sleep quality separately, so that part looks a little wonky. Here's the code, which produced the correct output:

    public static void main(String[] args) throws FileNotFoundException {
        Scanner scan = new Scanner(new FileReader("activities.txt"));
        String[] actList = { "Work", "school", "family", "friends", "date", "nature", "crusin", "photography",
                "making music/piano", "movies & tv", "reading", "gaming", "sport", "relax", "sleep", "shopping", "cleaning",
                "cooking", "laundry" };
        int row = 0;
        while (scan.hasNextLine()) {
            row++;
            int col = 0;
            int activityNo = 0;
            int[] actValue = new int[actList.length];
            String pipeDelim = scan.nextLine();
            String[] actName = pipeDelim.split(" \\| ");
            int sleepTagsUsed = 0;
            while (activityNo < actName.length) {
                col = 0;
                for (String a : actName) {
                    if (a.contains("sleep")) {
                        col = 14;
                        if (a.equalsIgnoreCase("bad sleep") || a.equalsIgnoreCase("bad sleep\t")) {
                            if (col < actList.length) {
                                actValue[col] = 0;
                                if (sleepTagsUsed == 0) {
                                    col++;
                                }
                                sleepTagsUsed++;
                            } else {
                                break;
                            }
                            if (!(activityNo > actName.length)) {
                                activityNo++;
                            }
                        } else if (a.equalsIgnoreCase("medium sleep") || a.equalsIgnoreCase("medium sleep\t")) {
                            if (col < actList.length) {
                                actValue[col] = 1;
                                if (sleepTagsUsed == 0) {
                                    col++;
                                }
                                sleepTagsUsed++;
                            } else {
                                break;
                            }
                            if (!(activityNo > actName.length)) {
                                activityNo++;
                            }
                        } else if (a.equalsIgnoreCase("good sleep") || a.equalsIgnoreCase("good sleep\t")) {
                            if (col < actList.length) {
                                actValue[col] = 2;
                                if (sleepTagsUsed == 0) {
                                    col++;
                                }
                                sleepTagsUsed++;
                            } else {
                                break;
                            }
                            if (!(activityNo > actName.length)) {
                                activityNo++;
                            }
                        } else if (a.equalsIgnoreCase("sleep early") || a.equalsIgnoreCase("sleep early\t")) {
                            if (col < actList.length) {
                                actValue[col] = 3;
                                if (sleepTagsUsed == 0) {
                                    col++;
                                }
                                sleepTagsUsed++;
                            } else {
                                break;
                            }
                            if (!(activityNo > actName.length)) {
                                activityNo++;
                            }
                        } else {
                            if (col < actList.length) {
                                actValue[col] = -1;
                            } else {
                                break;
                            }
                            System.out.println("No sleep logged error");
                        }
                    } else {
                        int j = 0;
                        for (String i : actList) {
                            if (a.equalsIgnoreCase(i) || a.equalsIgnoreCase(i + "\t")) {
                                    actValue[col] = 1;
                                if (activityNo > actName.length) {
                                    break;
                                } else {
                                    activityNo++;
                                    break;
                                }
                            } else {
                                if (col < actList.length) {
                                    j++;
                                    if (j > col) {
                                        actValue[col] = 0;
                                        col++;
                                    }
                                } else {
                                    break;
                                }
                            }
                        }
                        col++;
                    }
                }

            }
            for (int p : actValue) {
                System.out.print(p + "\t");
            }
            System.out.println();
        }
        scan.close();
    }