a <- read.table("a.txt", sep = '\t', header=TRUE, stringsAsFactors=FALSE)
a
SOC_023 SOC_040 SOC_044 SOC_055 SOC_079 SOC_089 SOC_090
1 N N N N N N N
2 N N N N N N Y
3 N N N N N Y N
a[1,2:7] <- "Y"
a
SOC_023 SOC_040 SOC_044 SOC_055 SOC_079 SOC_089 SOC_090
1 N Y Y Y Y Y Y
2 N N N N N N Y
3 N N N N N Y N
好吧,這是一個有點棘手,但可能去做。我將編輯這個答案。我們只想在第2列:7行中將N更改爲Y,我們只有N,所以我添加了新列,其值爲FALSE和TRUE。如果行從列只有N 2:7值爲FALSE becase的我們還沒有我用
b$new <- apply(b[,2:7], 1, function(x) any(x %in% c("Y")))
SOC_023 SOC_040 SOC_044 SOC_055 SOC_079 SOC_089 SOC_090 new
1 N N N N N N N FALSE
2 N N N N N N Y TRUE
3 N N N N N Y N TRUE
那麼任何Y.如果我們在new
列FALSE我們可以把值Y列2:7
b[,2:7][b$new==FALSE ,] <- "Y"
所以我們有想要的結果。
SOC_023 SOC_040 SOC_044 SOC_055 SOC_079 SOC_089 SOC_090 new
1 N Y Y Y Y Y Y FALSE
2 N N N N N N Y TRUE
3 N N N N N Y N TRUE
彙總,在2列的值N在roww每個值:7將與Y. 當然我們不需要柱new
因此我們可以通過
b$new <- NULL
確定刪除它來代替,所以計數列occarances和barplot:
x <- apply(a, 2, table)
y <- do.call(rbind, x)
易ř儲存卡barplot
z <- as.data.frame(t(y))
barplot(data.matrix(z[1:2,]), col=c("darkblue","red"),beside=TRUE)
X軸標籤將擴大,如果你自己繪製。
還有其他方法可以使用ggplot包得到這個圖,但我將不得不重新構建數據文件有點費時,歡呼!
>dat
SOC_023 SOC_040 SOC_044 SOC_055 SOC_079 SOC_089 SOC_090
1 N Y Y Y Y Y Y
2 N N N N N N Y
3 N N N N N N N
4 N N N N N Y N
5 N Y N Y N N N
6 Y Y Y Y Y Y Y
dat$new <- apply(dat[,1:7], 1, function(x) all(x %in% c("Y") | all((x %in% c("N")))))
result <- dat[dat$new!=TRUE, ]
result$new <- NULL
> result
SOC_023 SOC_040 SOC_044 SOC_055 SOC_079 SOC_089 SOC_090
1 N Y Y Y Y Y Y
2 N N N N N N Y
4 N N N N N Y N
5 N Y N Y N N N
謝謝!我有幾百萬行的「Y」和「N」的不同組合......有沒有辦法找到所有列都有「N」並替換上面相同列中的值?非常感謝 ! – user2017716
In a [1,2:7] < - 「Y」1是行數,2:7是列數。如果要在所有行中將N更改爲Y,並將第2列更改爲7,請鍵入a [,2:7] < - 「Y」。 – Adamm
但是,它只適用於「N」行嗎?我不想改變其他組合的行,例如7「N」,例如N N N N N Y N ...謝謝千禧年 – user2017716