if语句-R的两个数据格式问题



我有两个问题,我认为处理R.都很简单

我想创建一个IF语句,它将为列中的某些行分配一个NA值。我尝试了以下命令:

a[a[,21]==0,5:10] <-NA

错误显示:

[<-.data.frame中的错误(tmp,a[,21]==0,5:20,value=NA):数据帧的下标赋值中不允许缺少值

从本质上讲,代码应该取第21列中的任何0值,并将第5到10列中该行的值替换为NA。第21列已经有NA了,但我不确定这是否有作用?

我根本不知道如何制作下一个功能。我需要处理包含阳性和阴性对照的数据。但是,当我操作数据时,我不希望正控件和负控件值是操作的一部分,但我希望正控件与负控件保留在列中,因为我以后必须使用它们。有没有办法暂时忽略这些值,这样它们就不会被包括在操作中?

这里的示例数据:

L = c(2,1,4,3,1,4,2,4,5,1) 
R = c(2,4,5,1,"Neg",2,"",1,2,1) 
T = c(2,1,4,2,"CTRL",2,"PCTRL",2,1,4) 
test <- data.frame(L=L,R=R,T=T)

如果可能的话,我希望能够根据字符"Neg"CTRL"/""PCTRL"暂时忽略这些行,而不是根据它们在数据帧中的位置。请注意,对于负控件,Neg和CTRL位于单独的列、同一行,就像正控件一样,在单独的列和同一行中有一个空白和PCTRL。在这些奇怪的条件下,有办法做到这一点吗?

希望这写得足够清楚,我提前感谢任何人花时间帮助我!

尝试将数据帧子集设置为R不是"Neg"的行:

subset(test, R!="Neg")

对于NA问题,您的数据框架中可能已经有NA了,对吧?试试看这是否有效:

a[a[,21] %in% 0, 5:10] <- NA

改为尝试:

a[ which(a[,21]==0), 5:10] <-NA

说明:==操作返回NA值,而[<-函数不接受这些值。which函数将返回一个数字矢量并"丢弃NA"。顺便说一句,[函数(不带'<-')将返回所有NA行。这被认为是一个"功能",但我发现这是一个‘烦恼’,所以我通常会使用which进行选择和选择性分配。

对于第一个问题:如果a[,21]为负,您想分配NA吗?在这种情况下,

a[replace(a[,21],is.na(a[,21]),0)==0,5:10] <- NA

否则(注意,我用非零的东西替换了"0"的替换值(这里使用的是"1",但只要它不是零就无关紧要),

a[replace(a[,21],is.na(a[,21]),1)==0,5:10] <- NA

至于第二个问题,

subset(test,! (L %in% c("Neg","") | T %in% c("CTRL","PCTRL")))

LT中的滤波条件并不总是一致的情况下。若它们总是一致的,那个么您可以将测试应用于LT中的一个。此外,您可能还需要记住,T曾在S、S-PLUS和R中代表TRUE(现在仍然如此);您可以将另一个值重新分配给T,一切都会好起来,但我相信这通常是不鼓励的(c也是如此,人们也喜欢将其分配给它)。

最新更新