I am trying to convert vector data in csv format from this form 1 to this form 2 and vice versa in R. This has been giving me sleepless nights. I have been doing this in wolfram in the past but I had to switch to R. I would be very grateful for your kind suggestions. Thanks
rpolicastro, they are actually cell identifiers in MS Excel. In reality, the first column represents the field of view in x-direction, second column is field of view in y-direction while the third column represents the intensity distribution of an image.
For the sake of completeness, I am adding this reply to add another method to what rpolicastro posted and considering ATpoint 's comment :
This is wide to long-form conversion and vice versa scenario. My understanding from the post is the first two columns are x-y coordinates (id variables) and the rest are image intensities at the corresponding coordinates (measure variables). You want to convert from wide to long-form and long-form to wide:
df<- as.data.frame(cbind(seq_len(10), rep(0, 10), replicate(5, rnorm(10, 10, 2))))
colnames(df)<- c("A", "B", "C", "D", "E", "F", "G")
library(reshape2)# convert df from wide to long form by melt() function
meltDF = melt(df, id.vars = c("A", "B"))
head(meltDF)# A B variable value# 1 1 0 C 7.499697# 2 2 0 C 10.163781# 3 3 0 C 8.862005# 4 4 0 C 9.305449# 5 5 0 C 10.820081# 6 6 0 C 10.524560# convert meltDF from long form back to wide form using dcast() function
castDF = dcast(meltDF, A+B ~ variable, value.var ="value")
head(castDF)# A B C D E F G# 1 1 0 7.499697 6.492901 10.196289 8.304000 10.835184# 2 2 0 10.163781 10.269959 11.465557 7.326901 8.174221# 3 3 0 8.862005 15.052346 12.191936 11.098902 7.913761# 4 4 0 9.305449 8.986819 12.696276 9.643824 9.675121# 5 5 0 10.820081 8.908355 8.291135 10.148121 7.451699# 6 6 0 10.524560 8.256329 10.242652 10.824888 9.351173
From what I gathered from OP It would be meltDF <- melt(df, id.vars ="A") and castDF <- dcast(meltDF, A ~ variable, value.var ="value"), since the column names represent the y coordinates.
As a side note reshape2 has retired by the author and folded into tidyr [source].
what is represented in columns B and C of the desired output?
rpolicastro, they are actually cell identifiers in MS Excel. In reality, the first column represents the field of view in x-direction, second column is field of view in y-direction while the third column represents the intensity distribution of an image.
Looks like wide to long form. Check
melt()
from thereshape2
package orpivot_longer
fromtidyr
.