В data.frame
обычно строка является полным наблюдением, что означает, что все данные в ней соотносятся (как-то) с остальными. В опросе одна строка - это либо один человек (все вопросы), либо один вопрос для одного человека. В ваших данных здесь, однако, ваши первые строки BIRCA
и MYCN
полностью разделены, что означает, что вы хотите удалить один, не удаляя другой. В представлении «data-science-y» это для меня предполагает, что ваши данные имеют неправильную форму.
Чтобы сделать то, что вы хотите, нам нужно разделить их на отдельные кадры.
df <- read.table(header = TRUE, stringsAsFactors = FALSE, text = "
mb_rank mb_gene ts_rank ts_gene
1 BIRCA 1 MYCN
2 MYCN 2 MOB4
3 ATXN1 3 ABHD17C
4 ABHD17C 4 AEBP2")
df1 <- df[,1:2]
df2 <- df[,3:4]
df1
# mb_rank mb_gene
# 1 1 BIRCA
# 2 2 MYCN
# 3 3 ATXN1
# 4 4 ABHD17C
df2
# ts_rank ts_gene
# 1 1 MYCN
# 2 2 MOB4
# 3 3 ABHD17C
# 4 4 AEBP2
Здесь мы можем использовать intersect
, чтобы найти общие гены:
incommon <- intersect(df1$mb_gene, df2$ts_gene)
df1[df1$mb_gene %in% incommon,]
# mb_rank mb_gene
# 2 2 MYCN
# 4 4 ABHD17C
df2[df2$ts_gene %in% incommon,]
# ts_rank ts_gene
# 1 1 MYCN
# 3 3 ABHD17C
Если вы на 100% уверены, что у вас всегда будет одинаковое количество строк в каждой, тогда вы можете просто cbind
это вместе:
cbind(
df1[df1$mb_gene %in% incommon,],
df2[df2$ts_gene %in% incommon,]
)
# mb_rank mb_gene ts_rank ts_gene
# 2 2 MYCN 1 MYCN
# 4 4 ABHD17C 3 ABHD17C
Однако, если есть вероятность, что в каждом будут разные цифры, у вас возникнут проблемы. Если число одного кратно другому, вы получите «повторное использование» данных и предупреждение, но вы все равно получите данные (что я считаю ошибкой):
cbind(
df1[df1$mb_gene %in% incommon,],
df2
)
# Warning in data.frame(..., check.names = FALSE) :
# row names were found from a short variable and have been discarded
# mb_rank mb_gene ts_rank ts_gene
# 1 2 MYCN 1 MYCN
# 2 4 ABHD17C 2 MOB4
# 3 2 MYCN 3 ABHD17C
# 4 4 ABHD17C 4 AEBP2
Если нет кратное, однако, вы просто получите ошибку:
cbind(
df1[df1$mb_gene %in% incommon,],
df2[1:3,]
)
# Error in data.frame(..., check.names = FALSE) :
# arguments imply differing number of rows: 2, 3
Я полагаю, что вы думаете об этой структуре хранения, так как я считаю, что она опровергает предположения, которые некоторые инструменты делают о строках кадра.