我有R A表具有以下結構:如何按R中的值選擇行?
ID var1 var2 var3 .... varN
AA 1 2 1 3
AB 0.2 1 4 1
...
我怎麼可以只選擇那些行,其中var1<2
和var2<2
和var3<2
和... varN<2
?
我有R A表具有以下結構:如何按R中的值選擇行?
ID var1 var2 var3 .... varN
AA 1 2 1 3
AB 0.2 1 4 1
...
我怎麼可以只選擇那些行,其中var1<2
和var2<2
和var3<2
和... varN<2
?
如果您的數據框爲dat
測試對於一行中的小於2和retruning只有那些行的所有元素是:
dat[ apply(apply(dat[-1], 1, "<" ,2) , 2, all), ]
邏輯:內應用返回的邏輯矩陣:
apply(dat[-1], 1, "<" ,2)
[,1] [,2] [,3]
var1 TRUE TRUE TRUE
var2 TRUE FALSE TRUE
var3 TRUE TRUE FALSE
varN TRUE FALSE TRUE
注意,它是因爲R矩陣構成列主要順序,所以外部應用需要在列上工作,因此使用2作爲應用all
函數的INDEX。測試:
dat <- read.table(text="ID var1 var2 var3 varN
BA 1 1 1 1
AA 1 2 1 3
AB 0.2 1 4 1", header=TRUE)
dat[ apply(apply(dat[-1], 1, "<" ,2) , 2, all), ]
# ID var1 var2 var3 varN
#1 BA 1 1 1 1
如果數據是在data.frame
DF:
DF[rowSums(DF) == sum(2 * dim(DF)[2]), ]
因爲你的例子是不可複製的,我做我自己的:
x <- data.frame(x1 = 1:4, x2 = 2:5, x3 = 3:6, x4 = c(1,6,3,12))
#-----
x1 x2 x3 x4
1 1 2 3 1
2 2 3 4 6
3 3 4 5 3
4 4 5 6 12
根據您的標準,我覺得我們應該選擇第2行和第4行。該代碼可以幫助您:
x[apply(x, 1, function(z) all(diff(z) > 0)),]
#-----
x1 x2 x3 x4
2 2 3 4 6
4 4 5 6 12
如果我明白你的問題,至少有兩種方法可以做到你想要什麼(除了已作規定的首先是which()
命令基於查詢:
datasetname[which((datasetname$var1<2) & (datasetname$var2<2) & ... ]
應該返回所需的行,因此將
newdatasetname <- subset(datasetname, datasetname$var1<2 & ...)
只需鍵入?subset
和R中?which
,以瞭解更多有關這些命令。
我知道這種子集數據的方式,但想法是選擇所有行使用他們的名字,因爲我的數據幀是相當大的,我發現有點厭倦列出所有的行。 – annndrey
這將做到這一點:
dat[rowSums(dat[,-1] >= 2) == 0,]
測試:
dat <- read.table(text=
"ID var1 var2 var3 varN
BA 1 1 1 1
AA 1 2 1 3
AB 0.2 1 4 1", header=TRUE)
dat[rowSums(dat[,-1] >= 2) == 0,]
# ID var1 var2 var3 varN
#1 BA 1 1 1 1
謝謝!它和我需要的完全一樣! – annndrey