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