#r #list
#r #Список
Вопрос:
Я пытаюсь добавить столбец в конец моего фрейма данных. Предполагается, что столбец должен быть заполнен списком id
. Однако, когда я пишу w <-cbind(w, id)
, вместо этого он печатает все целиком id
в каждую ячейку фрейма данных.
Текущий вывод:
optOne% optTwo% Neither% TotalCount id
1 20 1 1 21 A1779TGH2ZMWJ2 A18ACKRAVMM8D8 A19JXVM2WO1CJ8 A1A7O3TW2O0TPM A1AKB300WFZPZ3
2 17 0 1 21 A1779TGH2ZMWJ2 A18ACKRAVMM8D8 A19JXVM2WO1CJ8 A1A7O3TW2O0TPM A1AKB300WFZPZ3
3 15 2 4 21 A1779TGH2ZMWJ2 A18ACKRAVMM8D8 A19JXVM2WO1CJ8 A1A7O3TW2O0TPM A1AKB300WFZPZ3
4 12 0 9 21 A1779TGH2ZMWJ2 A18ACKRAVMM8D8 A19JXVM2WO1CJ8 A1A7O3TW2O0TPM A1AKB300WFZPZ3
5 18 1 2 21 A1779TGH2ZMWJ2 A18ACKRAVMM8D8 A19JXVM2WO1CJ8 A1A7O3TW2O0TPM A1AKB300WFZPZ3
желаемый результат:
optOne% optTwo% Neither% TotalCount id
1 20 1 1 21 A1779TGH2ZMWJ2
2 17 0 1 21 A18ACKRAVMM8D8
3 15 2 4 21 A19JXVM2WO1CJ8
4 12 0 9 21 A1A7O3TW2O0TPM
5 18 1 2 21 A1AKB300WFZPZ3
Комментарии:
1. Без воспроизводимого примера трудно догадаться, как
id
на самом деле выглядит.2.
print(id)
ВОЗВРАТ:[1] "A1779TGH2ZMWJ2 A18ACKRAVMM8D8 A19JXVM2WO1CJ8 A1A7O3TW2O0TPM A1AKB300WFZPZ3"
3. Может показаться, что
id
это символьный вектор длиной 1, а не список или символьный вектор того же размера, что и ваш набор данных. Пожалуйста, предоставьте воспроизводимый пример. При этом вы можете найти свое решение!4. Арррх. Читать
?cbind.data.frame
. В нем не говорится, что списки являются допустимыми входными данными.
Ответ №1:
Похоже id
, это одна строка, поэтому сначала вам понадобится strsplit
ее (которая выводит список). затем просто добавьте новый столбец, используя $
w$id <- unlist(strsplit(id,split=" "))
Комментарии:
1. Если
guildenstem's
данные выглядят как приведенные ниже, dat$id <- strsplit(dat$id, » «)[[1]]
Ответ №2:
Вы также могли бы сделать:
dat <- read.table(text="optOne%,optTwo%,Neither%,TotalCount,id
1,20,1,1,21,A1779TGH2ZMWJ2 A18ACKRAVMM8D8 A19JXVM2WO1CJ8 A1A7O3TW2O0TPM A1AKB300WFZPZ3
2,17,0,1,21,A1779TGH2ZMWJ2 A18ACKRAVMM8D8 A19JXVM2WO1CJ8 A1A7O3TW2O0TPM A1AKB300WFZPZ3
3,15,2,4,21,A1779TGH2ZMWJ2 A18ACKRAVMM8D8 A19JXVM2WO1CJ8 A1A7O3TW2O0TPM A1AKB300WFZPZ3
4,12,0,9,21,A1779TGH2ZMWJ2 A18ACKRAVMM8D8 A19JXVM2WO1CJ8 A1A7O3TW2O0TPM A1AKB300WFZPZ3
5,18,1,2,21,A1779TGH2ZMWJ2 A18ACKRAVMM8D8 A19JXVM2WO1CJ8 A1A7O3TW2O0TPM A1AKB300WFZPZ3",
sep=",",header=TRUE,stringsAsFactors=F,check.names=F)
transform(dat, id=unique(scan(text=id, what="character")))
#Read 25 items
# optOne. optTwo. Neither. TotalCount id
#1 20 1 1 21 A1779TGH2ZMWJ2
#2 17 0 1 21 A18ACKRAVMM8D8
#3 15 2 4 21 A19JXVM2WO1CJ8
# 4 12 0 9 21 A1A7O3TW2O0TPM
#5 18 1 2 21 A1AKB300WFZPZ3