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
.