В моем data.frame
векторе x
, содержащем текстовые строки (с шестью значениями (от 0 до 100), разделенными запятой внутри каждой строки) в следующем формате:
x[1] "3,2,4,34,2,9"
x[2] "45,,67,,,"
x[3] ",,,,99,"
Вот ссылка на фактический вектор, с которым у меня проблемы: x.cvs
x.cvs
К сожалению, значение "0" записывается как "пустой пробел" между двумя запятыми, или перед первой запятой, или после последней запятой.
Было бы здорово сначала преобразовать его в:
x[1] "3,2,4,34,2,9"
x[2] "45,0,67,0,0,0"
x[3] "0,0,0,0,99,0"
Но самое главное, я хотел бы разбить этот вектор на 6 разных векторов x1, x2, x3, x4, x5, x6 и каждый из них взять значение из строки, а между запятыми заменить "нет пробела" на "0" , например, результат должен быть:
x1[3] 0
x6[2] 0
Я думаю, что strsplit() сработала бы, если бы между запятыми было значение, но поскольку значения нет, даже пустого места, я не уверен, как правильно действовать, не получая NA.
Я пробовал следующее, но это дает мне много ошибок:
x<- as.character(x)
x <- gsub(",,", ",0,", x)
x <- gsub(", ,", ",0,", x)
splitx = do.call("rbind", (strsplit(x, ",")))
splitx = data.frame(apply(splitx, 2, as.numeric))
names(splitx) = paste("x", 1:6, sep = "")
получаю ошибки...
In rbind(c("51", "59", "59", "60", "51", "51"), c("51", "59", "59", :
number of columns of result is not a multiple of vector length (arg 10994)
In apply(splitx, 2, as.numeric) : NAs introduced by coercion