![](/img/trans.png)
[英]Extracting rows from dataframe with conditions on multiple specific columns in R
[英]Extracting all rows from multiple columns with specific value from dataframe in R
我有一個名為all_genes
的數據all_genes
,總共有157列,第一列是包含基因名稱的genes
列。 利益的列是從第50到第157使用兩步驟( 50
, 52
, 54
, 56
,等等),這是在樣品的名字。 這些柱具有三個類型的值: 1
, 2
或3
,知道對於同一行(相同基因),我們可以有三種類型的用於不同樣品的值。
例如,基因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.