display values from dataframe into row data

Everything related to the development of modules in jamovi
User avatar
jonathon
Posts: 2737
Joined: Fri Jan 27, 2017 10:04 am

Re: display values from dataframe into row data

Post by jonathon »

hi,

it really does come down to what i've written here:
so there's two important things to check here. the first is that the table contains suitable columns, secondly that the items in the values list have names which match those columns.
so this is going to be a problem, because the items in the list are not named:

values <- as.list(combined_UA_df[2, colNo])

if you go names(values) i think you'll get NULL

instead you could do:

values <- list(xxx=combined_UA_df[2, colNo])

where xxx is the name of the column you want the value to appear in.

if you're not familiar with named lists in R, i can appreciate this can be a bit frustrating to figure out.

jonathon
lkchan
Posts: 18
Joined: Mon Dec 04, 2023 1:08 am

Re: display values from dataframe into row data

Post by lkchan »

Hi, After reading your comments, I relearnt the named dataframe and named list in R.
I name the column in the dataframe

Code: Select all

combined_UA_df <- data.frame(
            Item = df_name,
            UaValue = UA_values_df
          )
output of the combined_UA_df
Item UaValue
1 Q1 0
2 Q2 0
3 Q3 0
4 Q4 0
Here is the latest code

Code: Select all

for (i in 1:nrow(combined_UA_df)) {
            values <-combined_UA_df$UaValue[i])
            table1$setRow(rowNo = 3, values)
          }
          
          table1$setRow(rowNo = 3, list(var = paste("Universal Agreement (UA)")))
the table1 row3 is still not populated.
PS: I feel like singing "let it go"
User avatar
jonathon
Posts: 2737
Joined: Fri Jan 27, 2017 10:04 am

Re: display values from dataframe into row data

Post by jonathon »

hi,

if you check the value of the values list, you'll see that its elements are not named.

for example:

Code: Select all

df <- data.frame(Item=c('Q1', 'Q2', 'Q3', 'Q4'), 'UaValue'=c(0, 0, 0, 0))
values <- df$UaValue[1]
names(values)
you'll see that names(values) will return NULL. here are some different ways you can do it, such that the list elements are named:

Code: Select all

df <- data.frame(Item=c('Q1', 'Q2', 'Q3', 'Q4'), 'UaValue'=c(0, 0, 0, 0))
values <- list(UaValue=df$UaValue[1])
names(values)

Code: Select all

df <- data.frame(Item=c('Q1', 'Q2', 'Q3', 'Q4'), 'UaValue'=c(0, 0, 0, 0))
values <- df[1,'UaValue',drop=FALSE]
names(values)
the last thing, you just need to check that you have a column defined in your .r.yaml for this table, with the name UaValue.

cheers

jonathon
lkchan
Posts: 18
Joined: Mon Dec 04, 2023 1:08 am

Re: display values from dataframe into row data

Post by lkchan »

Hi Sir

I finally solve the UA_values. I change the table to vertical and follow your advice to declare column in r.yaml.

Code: Select all

  deps_df <- data.frame(Value = character(), stringsAsFactors = FALSE)
         
          for (item in self$options$dep){
            deps_df <- rbind(deps_df, data.frame(Value = paste(item)))
          }
          combined_score_df <- cbind(deps_df, expAgrSum_df, I_CVI_values_df, UA_values_df)
          
           table1 <- self$results$scoreTable2
          
          for(rowNo in 1:nrow(combined_score_df)){
            table1$addRow(rowNo, list(
              Item = rowNo,
              eA = combined_score_df$expAgrSum_df[rowNo],
              iCvi = combined_score_df$I_CVI_values_df[rowNo],
              uA = combined_score_df$UA_values_df[rowNo]
            ))
          }
          
When I want to call Item = combined_scaore_df$deps_df[rowNo], it is not display.
this is the r.yaml code

Code: Select all

- name: scoreTable2
      title: Score Table
      type: Table
      rows: 0
      columns:
      - name: Item
        title: Item
        type: text
      - name: eA
        title: 'Experts in Agreement'
        type: number
      - name: iCvi
        title: 'I-CVI'
        type: number
      - name: uA
        title: 'UA'
        type: number
where did I went wrong?
User avatar
jonathon
Posts: 2737
Joined: Fri Jan 27, 2017 10:04 am

Re: display values from dataframe into row data

Post by jonathon »

i wonder if you don't need:

Code: Select all

for(rowNo in 1:nrow(combined_score_df)){
    table1$addRow(rowNo, list(
        Item = combined_score_df$Value[rowNo],
        eA = combined_score_df$expAgrSum_df[rowNo],
        iCvi = combined_score_df$I_CVI_values_df[rowNo],
        uA = combined_score_df$UA_values_df[rowNo]
    ))
}
if that doesn't work, we'll need to know the value of combined_score_df

cheers

jonathon
lkchan
Posts: 18
Joined: Mon Dec 04, 2023 1:08 am

Re: display values from dataframe into row data

Post by lkchan »

FINALLY IT WORK :grinning: :grinning:

Thank you very much for your patience in guiding.

Terima Kasih banyak banyak (Malay language)
User avatar
jonathon
Posts: 2737
Joined: Fri Jan 27, 2017 10:04 am

Re: display values from dataframe into row data

Post by jonathon »

no problem. my pleasure.

hopefully this will build your confidence going forward.

cheers

jonathon
Post Reply