Извлечение строк на основе только одного столбца с использованием R [закрыто]

Вы можете найти это сами:

t1.py

#!/usr/bin/python
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.debug('t1 has started')
logger.debug('t2 is being imported')
import t2

logger.debug('A is being "compiled"')
class A:
    flag = False
logger.debug('ID A: %r', id(A))
logger.debug('ID A.flag %r', id(A.flag))

logger.debug('What is __name__? %r', __name__)
if __name__ == "__main__":
    logger.debug('__name__ was "__main__"')
    logger.debug('Calling t2.f()')
    t2.f()
    logger.debug('t2.f() was called')
    logger.debug('ID A.flag: %r', id(A.flag))
    print(A.flag)

t2.py

#!/usr/bin/python
import logging
logger = logging.getLogger(__name__)
logger.debug('t2 is being imported')

logger.debug('t2 is now importing t1')
import t1

def f():
    logger.debug('f is being called')
    t1.A.flag = True
    logger.debug('ID t1: %r', id(t1))
    logger.debug('ID t1.A: %r', id(t1.A))
    logger.debug('ID t1.A.flag: %r', id(t1.A.flag))
    print(t1.A.flag)

Мой выход

Я раскалываю это с комментариями

DEBUG:__main__:t1 has started
DEBUG:__main__:t2 is being imported
DEBUG:t2:t2 is being imported
DEBUG:t2:t2 is now importing t1

Как вы можете видеть, в первый раз (как отмечали другие) t1 на самом деле имеет имя __main__. Он пытается импортировать t2, но сразу t2 пытается импортировать t1.

DEBUG:t1:t1 has started
DEBUG:t1:t2 is being imported

Вы можете видеть, что ни одно из операторов журнала t2 не запускается. Это потому, что Python кэширует импортированные модули, поэтому он сначала смотрит в кеш для t2 и говорит: «Ага, я уже импортировал этого парня, мне просто нужно вернуть его, вот и все!»

DEBUG:t1:A is being "compiled"
DEBUG:t1:ID A: 140377934341704
DEBUG:t1:ID A.flag 4312040768
DEBUG:t1:What is __name__? 't1'

Итак, вы заметите, что теперь он пробился через импорт t1. И t2

DEBUG:t2:t2 is done being imported

Выполнение продолжается в __main__ t1

DEBUG:__main__:A is being "compiled"
DEBUG:__main__:ID A: 140377934344360
DEBUG:__main__:ID A.flag 4312040768

Обратите внимание, что id для этого A и A.flag

DEBUG:__main__:What is __name__? '__main__'
DEBUG:__main__:__name__ was "__main__"
DEBUG:__main__:Calling t2.f()
DEBUG:t2:f is being called
DEBUG:t2:ID t1: 4317998840
DEBUG:t2:ID t1.A: 140377934341704
DEBUG:t2:ID t1.A.flag: 4312040736

Обратите внимание, что эти id s соответствуют t1.A, а не __main__.A s.

True
DEBUG:__main__:t2.f() was called
DEBUG:__main__:ID A.flag: 4312040768
False
-6
задан Niko 31 March 2019 в 09:07
поделиться

2 ответа

Пытались создать ваши данные, используя следующее:

df <- data.frame(col1 = c(1,1,2,2,1,1,2,2),
                 col2 = c(34,34,342,23,34,34,342,23),
                 col3 = c(3,4,3,4,3,4,3,4))

И, если вы хотите создать подмножество только на основе одного столбца, вы можете использовать @ kyle-marsh solution

> df[df$col1 == 1, ]
  col1 col2 col3
1    1   34    3
2    1   34    4
5    1   34    3
6    1   34    4
[118 ] И, если вам нужны только отдельные столбцы, возможно, вы можете попробовать это

> unique(df[df$col1 == 1, ])
  col1 col2 col3
1    1   34    3
2    1   34    4

И, если вам нужно агрегировать данные на основе col1, вы можете попробовать следующее. Поскольку col1 является числовым,

> aggregate(df[,-1], by = list(col1 = df$col1), sum)
  col1 col2 col3
1    1  136   14
2    2  730   14
0
ответ дан Alex Ho 31 March 2019 в 09:07
поделиться

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

Давайте назовем вашу таблицу «tab», а новый фрейм данных «df».

df<-as.data.frame(tab)

Теперь намного проще установить подмножество на основе вашего интересующего столбца. Мы сделаем еще один df с именем "df_subsetted", подмножеством df на основе значения для Col1.

df_subsetted<-df[df$Col1==1,]

Или, если вы хотите использовать функцию фильтра.

require(dplyr)
df_subsetted<-filter(df, Col1==1)

0
ответ дан Kyle Marsh 31 March 2019 в 09:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: