2014-03-04 1 views
0

Это мой набор данных ниже. Это список из 10 кадров данных, и каждый кадр данных содержит разные элементы. То, что я хотел бы сделать, - разделить объекты символа в каждом кадре данных, чтобы он отображал только числа внутри объектов, а не буквы. Поскольку я собираюсь проверить, будут ли цифры в каждом кадре данных четными или нечетными после этого, его, вероятно, нужно будет превратить в вектор целых чисел. Так, например, для первого кадра данных, он будет возвращать 4. Для второго кадра данных, он вернется 8. Для третьего, он будет возвращать-12, и т.д. и т.п.Разбиение каждого объекта символа в кратных кадрах данных в списке

$control 
[1] "A4" 

$control 
[1] "G8" 

$pq 
[1] "A4" "G12" 

$docetaxel 
[1] "G8" 

$docetaxel_b 
[1] "A1" "A2" "A3" "A4" "A5" "A6" "A7" "A8" "A9" "A10" "A11" "A12" "B1" "B2" "B3" "B4" "B5" "B6" "B7" "B8" 
[21] "B9" "B10" "B11" "B12" "C1" "C2" "C3" "C4" "C5" "C6" "C7" "C8" "C9" "C10" "C11" "C12" "D1" "D2" "D3" "D4" 
[41] "D5" "D6" "D7" "D8" "D9" "D10" "D11" "D12" "E1" "E2" "E3" "E4" "E5" "E6" "E7" "E8" "E9" 

$docetaxel 
[1] "E9" "E10" "E11" "E12" "F1" "F2" "F3" "F4" "F5" "F6" "F7" "F8" "F9" "F10" "F11" "F12" "G1" "G2" "G3" "G4" 
[21] "G5" "G6" "G7" "G8" "G9" "G10" "G11" "G12" "H1" "H2" "H3" "H4" "H5" "H6" "H7" "H8" "H9" "H10" "H11" "H12" 

$dactinomycin 
[1] "E12" 

$cisplatin 
[1] "F8" 

$cisplatin_b 
[1] "A1" "A2" "A3" "A4" "A5" "A6" 

$cisplatin 
[1] "A6" "A7" "A8" "A9" "A10" "A11" "A12" "B1" "B2" "B3" "B4" "B5" "B6" "B7" "B8" "B9" "B10" "B11" "B12" "C1" 
[21] "C2" "C3" "C4" "C5" "C6" "C7" "C8" "C9" "C10" "C11" "C12" "D1" "D2" "D3" "D4" "D5" "D6" "D7" "D8" "D9" 
[41] "D10" "D11" "D12" "E1" "E2" "E3" "E4" "E5" "E6" "E7" "E8" "E9" "E10" "E11" "E12" "F1" "F2" "F3" "F4" "F5" 
[61] "F6" "F7" "F8" "F9" "F10" "F11" "F12" "G1" "G2" "G3" "G4" "G5" "G6" "G7" "G8" "G9" "G10" "G11" "G12" "H1" 
[81] "H2" "H3" "H4" "H5" "H6" "H7" "H8" "H9" "H10" "H11" "H12" 

Спасибо заранее !

ответ

1

Я не думаю, что ваш список содержит фреймы данных, по крайней мере, не так, как показано. Вот такой подход, чтобы избавиться от персонажей. Это находится на небольшом подмножестве ваших данных.

lst <- list(control="G8", pq=c("A4", "G12"), docetaxel=c("G8"), docetaxel_b=c("A1", "A2")) 
lapply(lst, function(x) as.numeric(gsub("[^0-9]", "", x))) 

производит:

$control 
[1] 8 

$pq 
[1] 4 12 

$docetaxel 
[1] 8 

$docetaxel_b 
[1] 1 2 

В принципе, мы просто избавиться от всего, что не является числом ("[^0-9]") с gsub, а затем преобразовать в числовой. Вы можете легко изменить функцию внутри lapply, чтобы проверить, являются ли значения четными или нечетными с чем-то вроде %% 2, хотя, не зная точно, что вы хотите знать (количество эвенов, наличие коэффициентов и т. Д.), Я не могу предоставить дальнейшие указания.

+0

Спасибо! Поэтому я сделал это, тогда я сделал lapply (lst, function (x) x %% 2 == 0). Затем я сделал lapply (lst, function (x) all (x)), чтобы увидеть, какие из них имеют только четные числа. Теперь я хочу избавиться от кадров данных, которые вернули TRUE для последней используемой мной функции. Поэтому, если у них есть только четные числа, я хочу удалить их из исходного списка из 10 кадров данных. Как мне это сделать? – hj14

+0

Предполагая, что ваши исходные данные находятся в 'lst', а ваши окончательные данные с истинными и ложными находятся в' lst2', тогда 'lst [unlist (lst2)]' – BrodieG

+0

Это дает мне те, которые являются TRUE (те, которые только имеют четные числа). Как я могу настроить это, чтобы я мог вернуть ему те, которые являются FALSE (те, у которых нет только четных чисел)? – hj14

Смежные вопросы