Создание подсписков из одного большего списка - PullRequest
0 голосов
/ 02 октября 2018

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

У меня есть таблица, которая называется tkalp, с 2 столбцами и 3001 строкой, и после команды 'subset', которую я написал, эта таблица теперь содержит 1084 строки и называется kp.Некоторые значения kp: enter image description here

Как вы можете видеть, некоторые значения из столбца V1 непрерывно с шагом = 2, а некоторые нет.

Итак, моя сложность такова:

1. Я бы хотел «разбить» этот большой список / таблицу на меньшие списки / таблицы, которые содержат только непрерывные числа.Для этой трудности я попытался реализовать ее с помощью этих команд, но все пошло не так, как планировалось:

for (n in 1:nrow(kp)) {
  kp1 <- subset(kp, kp[n+1,1] - kp[n,1])==2)
}

2. После выполнения этой задачи я хотел бы сохранитьтолько те списки, которые содержат более 10 строк.

Любая идея или помощь приветствуются!Большое спасибо

РЕДАКТИРОВАТЬ

Я загрузил изображение моей таблицы и разделил числа, которые я хочу разместить в разных таблицах.И я хотел бы сделать это для всей исходной таблицы. kp

синий - это таблица меньшего размера, чем исходный

черный другой

желтый другой

красный другой

И после того, как я создам все эти меньшие таблицы, я хотел бы сохранить только те таблицы, которые содержат более 10 чисел.Например, я не хочу сохранять желтую таблицу, поскольку она содержит только 4 числа.

Еще раз спасибо

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

С базой R

kp=data.frame(V1=c(seq(8628,8618,by=-2),seq(8576,8566,by=-2),78,76),V2=runif(14))
kp$diffV1=c(-2,diff(kp$V1))/-2
kp$group=cumsum(ifelse(kp$diffV1/-2==1,0,1))+1
lkp=split(kp,kp$group)

# > kp
#      V1         V2 diffV1 group
# 1  8628 0.74304325     -2     1
# 2  8626 0.84658101     -2     1
# 3  8624 0.74540089     -2     1
# 4  8622 0.83551473     -2     1
# 5  8620 0.63605222     -2     1
# 6  8618 0.92702915     -2     1
# 7  8576 0.81978587    -42     2
# 8  8574 0.01661538     -2     2
# 9  8572 0.52313859     -2     2
# 10 8570 0.39997951     -2     2
# 11 8568 0.61444445     -2     2
# 12 8566 0.23570017     -2     2
# 13   78 0.58397923  -8488     3
# 14   76 0.03634809     -2     3
0 голосов
/ 02 октября 2018

Как насчет

           df <- data.frame(V1=c(1,3,5,10,12,14, 20, 22), V2=runif(8))
            df$diff <- c(2,diff(df$V1))
            df$numSubset <- cumsum(df$diff != 2) + 1
            iter <- seq(max(df$numSubset))
            purrr::map(iter, function(i) filter(df, numSubset == i))
            listOfSubsets <-  purrr::map(iter, function(i) dplyr::filter(df, numSubset == i))

Затем вы просматриваете список и выбираете только те, которые вам нужны.Кстати, purrr также предоставляет средства для фильтрации списка, который вы получаете без зацикливания.Проверьте документацию мур.

...