R split character vector using strsplit?

As a newbie in R how to treat correctly a variable having multiple values like that :

x = c("1","1","1/2","2","2/3","1/3")

As you see value 3 only appears in conjonction with others.

To compute x further, the best would be to obtain 3 vectors like :

X[1] = c(1,1,1,NA,NA,1)

because "1" appears in 1st, 2nd, 3rd and 6th places. idem with X[2] and X[3]

All information seems to be preserved doing so : Am I wrong ?

I have already tested strsplit but it is not preserving NA's values that are not already in my vector.

Answers


This seems to work:

x = c("1","1","1/2","2","2/3","1/3")

#Split on your character. This may not be inclusive of all characters that 
#need to be split on.
xsplit <- strsplit(x, "\\/")
#Find the unique items
xunique <- unique(unlist(xsplit))

#Iterate over each xsplit for all unique values
out <- sapply(xsplit, function(z)  
  sapply(xunique, function(zz) zz %in% z)
)
#convert FALSE to NA
out[out == FALSE] <- NA

#Results in
> out
  [,1] [,2] [,3] [,4] [,5] [,6]
1 TRUE TRUE TRUE   NA   NA TRUE
2   NA   NA TRUE TRUE TRUE   NA
3   NA   NA   NA   NA TRUE TRUE

An alternative is to use cSplit_e from my "splitstackshape" package.

x = c("1","1","1/2","2","2/3","1/3")
library(splitstackshape)
cSplit_e(data.frame(x), "x", "/")
#     x x_1 x_2 x_3
# 1   1   1  NA  NA
# 2   1   1  NA  NA
# 3 1/2   1   1  NA
# 4   2  NA   1  NA
# 5 2/3  NA   1   1
# 6 1/3   1  NA   1

(Note that the results here are transposed in comparison to the results in the accepted answer.)


Need Your Help

.NET Introspection VS Reflection

.net reflection introspection

What is the difference between Introspection and Reflection in .NET

Android: Getting Notified when Audio is Played

android audio

Is it possible to be notified in Android when the Audio system starts playing audio? it looks like i should wire up a BroadcastReceiver, but it's not clear what i would listen for. I could listen f...

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.