Воссоздать тестовые данные:
xx <- structure(list(
`15LOX-1` = "207328_at",
`16.1` = "215946_x_at",
`16.2` = NA,
`16.3A5` = c("200983_x_at", "200984_s_at", "200985_s_at", "212463_at", "228748_at"),
`160-KD` = c("201224_s_at", "201225_s_at" ),
`1600019D15Rik` = c("218465_at", "222642_s_at", "225492_at", "235907_at", "238831_at")),
.Names = c("15LOX-1", "16.1", "16.2", "16.3A5", "160-KD", "1600019D15Rik"))
Сначала удалите все значения NA:
xx[is.na(xx)] <- NULL
Теперь создайте временную переменную, которая хранит длину каждого элемента в x:
tmp <- sapply(xx, function(xt)length(xt))
Теперь используйте rep
для создания ключа (то есть повторите имена x, каждый раз, когда длина соответствующего элемента), и используйте комбинацию unlist
и unname
для создания значений:
data.frame(
key = rep(names(tmp), times=unname(tmp)),
value = unlist(unname(xx))
)
Это производит:
key value
1 15LOX-1 207328_at
2 16.1 215946_x_at
3 16.3A5 200983_x_at
4 16.3A5 200984_s_at
5 16.3A5 200985_s_at
6 16.3A5 212463_at
7 16.3A5 228748_at
8 160-KD 201224_s_at
9 160-KD 201225_s_at
10 1600019D15Rik 218465_at
11 1600019D15Rik 222642_s_at
12 1600019D15Rik 225492_at
13 1600019D15Rik 235907_at
14 1600019D15Rik 238831_at
Наконец, используйте write.csv(x, file=...)
или вашу любимую функцию записи, чтобы сохранить данные в файл.