strsplit расплавленного набора данных - PullRequest
3 голосов
/ 31 декабря 2011

Я пытаюсь отобразить результаты генетического теста в формате большого файла CSV. Каждая позиция x, y в CSV представляет собой числовую оценку, большинство из которых равны нулю. Меня интересуют только ненулевые данные. Также имена каждого заголовка X и Y содержат дополнительную информацию, которую я хотел бы использовать для дальнейшего подбора данных. Я хотел растопить данные, обрезать все строки с нулевыми значениями и разбить растопленные данные на строки, чтобы получить дополнительные столбцы, которые я мог бы использовать для приведения. Однако я сталкиваюсь с проблемой, когда пытаюсь разбить строки на расплавленные данные. Вот команды и некоторые примеры данных:

test <- read.csv("~/Documents/Bioinformatics/Python_Scripts/test.csv", as.is=TRUE)
smalltest <- test[1:10, 1:4]
small.melt <- melt(smalltest)
head(smalltest)
head(small.melt)

Это приводит к данным ниже:

head(small.test)
BlastCompare Triostin_A_2 Triostin_A_1 Myxochelin_2 Myxochelin_1 
HA9WEQA05FUABT_497_TxR_K2            0            0      105          120 
G9VUOJT08JA64I_426_TxC_N3            0            0  0            0 
HA9WEQA06G2SFP_457_TxC_J4            0            0     0            0 
HA9WEQA05GCP8Q_506_TxR_J7          150          150    0            0 
HA9WEQA07HU6MW_421_TxR_P7            0            0    0            0 
G9VUOJT05FST3W_399_TxR_J4            0            0    255          240

голова (small.melt)

BlastCompare     variable value 
HA9WEQA05FUABT_497_TxR_K2Triostin_A_2     0  
G9VUOJT08JA64I_426_TxC_N3 Triostin_A_2     0 
HA9WEQA06G2SFP_457_TxC_J4 Triostin_A_2     0 
HA9WEQA05GCP8Q_506_TxR_J7 Triostin_A_2   150 
HA9WEQA07HU6MW_421_TxR_P7 Triostin_A_2     0 
G9VUOJT05FST3W_399_TxR_J4 Triostin_A_2     0

Однако, когда я пытаюсь разбить строку в столбце $ variable, это дает следующий результат:

small.melt$name <- sapply(strsplit(small.melt$variable, "_") , "[", 1)
Error in strsplit(small.melt$variable, "_") : non-character argument

Есть мысли о том, почему? Или как это обойти?

спасибо Зак cp

1 Ответ

4 голосов
/ 31 декабря 2011

Проблема в том, что small.melt$variable имеет класс фактор , в то время как strsplit() ожидает вектор символа в качестве первого аргумента.(Это говорит вам об этом с сообщением об ошибке, которое возвращается выше, и в урезанном примере ниже):

f <- as.factor(c("a_b", "a_c"))
strsplit(f, "_")
Error in strsplit(f, "_") : non-character argument

Чтобы сделать strsplit() счастливым, просто используйте as.character(), чтобы преобразовать коэффициент всимвольный вектор:

sapply(strsplit(as.character(small.melt$variable), "_") , "[", 1)
#  [1] "Triostin"   "Triostin"   "Triostin"   "Triostin"   "Triostin"  
#  [6] "Triostin"   "Triostin"   "Triostin"   "Triostin"   "Triostin"  
# [11] "Triostin"   "Triostin"   "Myxochelin" "Myxochelin" "Myxochelin"
# [16] "Myxochelin" "Myxochelin" "Myxochelin" "Myxochelin" "Myxochelin"
# [21] "Myxochelin" "Myxochelin" "Myxochelin" "Myxochelin"
...