rek
rek

Reputation: 187

Specific separator can separate the data frame

I try to execute this command

df2 <- as.data.frame.matrix(table(stack(setNames(strsplit(df$col1, "---", fixed = TRUE), df$id))[2:1]))

However I receive this error:

Error in table(stack(setNames(strsplit(df$col1,  : 
  attempt to make a table with >= 2^31 elements

Any idea why this error happaned? Unfortunately I can't provide a reproducable example with this code because I can't find what caused this error.

What makes this command is that it make 0 and 1 values which separate by ---.

Example input:

data.frame(id = c(1,2), col1 = c("text---here","text---there"))

expected output

data.frame(id = c(1,2), text = c(1,1), here = c(1,0), there = c(0,1))

Upvotes: 0

Views: 35

Answers (1)

Ventrilocus
Ventrilocus

Reputation: 1488

If the task in question is complex, it is worth splitting it into chunks. Try this:

x = data.frame(id = c(1,2), col1 = c("text---here","text---there")); x$col1 = as.vector(x$col1)
Split = strsplit(as.vector(x$col1), split = "---")
levels = unique(unlist(Split))
x = cbind(x, matrix(ncol = length(levels), nrow = nrow(x)))
for(i in 1:length(levels))
{
  x[,ncol(x)-length(levels)+i] <- sapply(Split, function(x) max(x == levels[i]))
}
colnames(x) <- c("id", "col1", levels)
x
# id         col1 text here there
# 1  1  text---here    1    1     0
# 2  2 text---there    1    0     1

Upvotes: 1

Related Questions