簡體   English   中英

從R中的數據框中提取具有特定值的多個列中的所有行

[英]Extracting all rows from multiple columns with specific value from dataframe in R

我有一個名為all_genes的數據all_genes ,總共有157列,第一列是包含基因名稱的genes列。 利益的列是從第50到第157使用兩步驟( 50525456 ,等等),這是在樣品的名字。 這些柱具有三個類型的值: 123 ,知道對於同一行(相同基因),我們可以有三種類型的用於不同樣品的值。

例如,基因X的行在第50列中的值為1 ,但在第52列中的值為2

我希望根據這些值從偶數列中提取所有行。 為了獲得更好的主意,以下是數據框的外觀:

原始數據框

現在,我編寫了這段代碼以提取例如值1行:

# extracting rows of value "1" from column 50 to 157, by taking into account only the even columns
df <- all_genes[which(all_genes[, seq(50, 157, 2)] == 1), ] 

# removing NAs if all the rows are NAs from columns 50 to 157
df <- df[rowSums(is.na(df[, 50:157])) != ncol(df[, 50:157]), ]

但是,我得到的是以下內容:

上面代碼的輸出

如您所見,第一列包含的值都等於1但是如果您查看其他列,則看到的值是2 (和3 )。 我認為我的代碼只看第50列,而忽略第50列的值不同於1的可能性,因為對於同一個基因,我們在第50列的值可以為2 ,而在第52列的值可以為1 為了確認這一點,我檢查了可能性(由於信譽不佳,請復制並粘貼以下鏈接):

i.stack.imgur.com/rZQ2E.png

您能否告訴我我的代碼是否正常工作,還是應該更改某些內容?

如果我在代碼中將值從1更改為2也會發生相同的情況。 我仍將在第50列中獲得2值,但在其他列中獲得各種值。

提前致謝。

編輯按照@tobiasegli_te的要求,這是一個可復制的小型數據框:

structure(list(`#00e41e6a-9fe7-44f9-978b-7b05b179506a` = c(1, 
1, NA, NA, NA, NA, NA, NA, NA, 1, 2, 1, NA, NA, 2, NA, 3, 1, 
1, NA, NA, NA, 2, NA, 1, NA, NA, NA, NA, 1, 1, 1, NA, NA, 1, 
NA, NA), `#aca312ab-6dbd-4183-8b22-8f37834f3426` = c(NA, NA, 
NA, 1, NA, 1, NA, 2, 1, NA, 2, 1, 1, 1, NA, NA, NA, 1, 1, 1, 
NA, 1, 2, 1, NA, 1, NA, 1, NA, NA, 1, NA, 1, NA, 1, 1, 1), `#0730216b-c201-443c-9092-81e23fd13c6c` = c(NA, 
NA, NA, NA, NA, NA, 2, NA, NA, NA, NA, NA, 1, NA, NA, 1, NA, 
NA, NA, NA, 1, NA, NA, NA, NA, NA, 2, NA, NA, NA, NA, NA, NA, 
2, 1, NA, NA), `#acd5ceef-c5cf-4e95-9394-c50fdbc70c8d` = c(NA, 
NA, 2, NA, 2, NA, 2, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2, NA, 
NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, 1, NA, 1, NA, NA, NA, 
1, NA, NA)), .Names = c("#00e41e6a-9fe7-44f9-978b-7b05b179506a", 
"#aca312ab-6dbd-4183-8b22-8f37834f3426", "#0730216b-c201-443c-9092-81e23fd13c6c", 
"#acd5ceef-c5cf-4e95-9394-c50fdbc70c8d"), row.names = c(1L, 2L, 
4L, 6L, 8L, 10L, 11L, 16L, 20L, 22L, 23L, 30L, 32L, 37L, 38L, 
43L, 45L, 46L, 47L, 49L, 50L, 53L, 62L, 64L, 65L, 67L, 68L, 69L, 
70L, 71L, 73L, 74L, 76L, 77L, 79L, 80L, 81L), class = "data.frame")

對於第一種情況,請嘗試類似

mtcars[sapply(1:nrow(mtcars), function(i) any(mtcars[i, seq(2, ncol(mtcars), 2)] == 4)),]

                # mpg cyl  disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4      21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
# Mazda RX4 Wag  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
# Datsun 710     22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
# Merc 240D      24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
# Merc 230       22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
# Merc 280       19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
# Merc 280C      17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
# Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
# Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
# Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
# Toyota Corona  21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
# Fiat X1-9      27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
# Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
# Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
# Volvo 142E     21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

為您的數據

all_genes[sapply(1:nrow(all_genes), function(i) any(all_genes[i, seq(50, 157, 2)] == 1)),]

對於第二種情況,請嘗試類似

mtcars[sapply(1:nrow(mtcars), function(i) all(is.na(mtcars[i, seq(2, ncol(mtcars), 2)]))),]

為您的數據

all_genes[sapply(1:nrow(all_genes), function(i) all(is.na(all_genes[i, seq(50, 157, 1)]))),]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM