In R programming, the str(x) will guide you to find out about the structure of the data:
x <- dget("fupedCSV.txt")
str(x)
## 'data.frame': 607 obs. of 9 variables:
## <a > ...
## $ rh :'data.frame': 607 obs. of 1 variable:
## ..$ hr: num 7.68e-05 8.08e-05 8.49e-05 9.11e-05 1.00e-04 ...
## $ prec :'data.frame': 607 obs. of 1 variable:
## ..$ prec: num 401 426 450 484 533 ...
## $ ws :'data.frame': 607 obs. of 1 variable:
## ..$ ws: num 12.9 12.9 12.6 12.6 12.3 ...
Now from the structure, see that the last three columns, the data frames are nested inside the data frame.
## ORIGINAL: y <- as.data.frame(lapply(x, function(x) if (is.list(x)) x[[1]] else x ))
y <- do.call(data.frame,x) ## thanks @akrun!
str(y)
## 'data.frame': 607 obs. of 9 variables:
## $ id : int 1 2 3 4 5 6 7 8 9 10 ...
## $ lon : num 27.8 28.2 28.8 29.2 29.8 ...
## $ lat : num -22.2 -22.2 -22.2 -22.2 -22.2 ...
## $ temp : num 295 296 296 296 297 ...
## $ month: int 9 9 9 9 9 9 9 9 9 9 ...
## $ year : int 2018 2018 2018 2018 2018 2018 2018 2018 2018 2018 ...
## $ rh : num 7.68e-05 8.08e-05 8.49e-05 9.11e-05 1.00e-04 ...
## $ prec : num 401 426 450 484 533 ...
## $ ws : num 12.9 12.9 12.6 12.6 12.3 ...
I think this observation has cleared up your query.