原书网址
no.2
R语法基础
1.数据筛选
a.使用数字与行列名称
向量
> v <- c(1,4,4,3,2,2,3)
> v[c(2,3,4)]
[1] 4 4 3
> v[2:4]
[1] 4 4 3
> v[c(2,4,3)]
[1] 4 3 4
数据框
> data <- read.table(header=T, text='
+ subject sex size
+ 1 M 7
+ 2 F 6
+ 3 F 9
+ 4 M 11
+ ')#创建数据框
> data[1,3]
[1] 7
> data[1,"size"]
[1] 7
> data[1:2, ]
subject sex size
1 1 M 7
2 2 F 6
> data[c(1,2), ]
subject sex size
1 1 M 7
2 2 F 6
> data[1:2, 2]
[1] M F
Levels: F M
> data[c(1,2), 2]
[1] M F
Levels: F M
> data[1:2, c("sex","size")]
sex size
1 M 7
2 F 6
> data[c(1,2), c(2,3)]
sex size
1 M 7
2 F 6
b.使用布尔值
向量
> v>2
[1] FALSE TRUE TRUE TRUE FALSE FALSE TRUE
> v[v>2]
[1] 4 4 3 3
> v[ c(F,T,T,T,F,F,T)]
[1] 4 4 3 3
数据框
> data$subject < 3
[1] TRUE TRUE FALSE FALSE
> data[data$subject < 3, ]
subject sex size
1 1 M 7
2 2 F 6
> data[c(TRUE,TRUE,FALSE,FALSE), ]
subject sex size
1 1 M 7
2 2 F 6
> which(data$subject < 3)
[1] 1 2
反选
> v[-1]
[1] 4 4 3 2 2 3
> v[-1:-3]
[1] 3 2 2 3
> v[-length(v)]
[1] 1 4 4 3 2 2
2.数据筛选2
与向量
> v <- c(1,4,4,3,2,2,3)
> subset(v, v<3)#subset筛选出符合条件的某一项
[1] 1 2 2
> v
[1] 1 4 4 3 2 2 3
> v <- c(1,4,4,3,2,2,3)
> subset(v, v<3)
[1] 1 2 2
> v[v<3]
[1] 1 2 2
> t <- c("small", "small", "large", "medium")
> subset(t, t!="small")
[1] "large" "medium"
> t[t!="small"]
[1] "large" "medium"
与数据框
> data <- read.table(header=T, text='
+ subject sex size
+ 1 M 7
+ 2 F 6
+ 3 F 9
+ 4 M 11
+ ')#创建一个简单的数据框
> subset(data, subject < 3)
subject sex size
1 1 M 7
2 2 F 6
> data[data$subject < 3, ]
subject sex size
1 1 M 7
2 2 F 6
#筛选特殊的行或者列
> subset(data, subject < 3, select = -subject)
sex size
1 M 7
2 F 6
> subset(data, subject < 3, select = c(sex,size))
sex size
1 M 7
2 F 6
> subset(data, subject < 3, select = sex:size)
sex size
1 M 7
2 F 6
> data[data$subject < 3, c("sex","size")]
sex size
1 M 7
2 F 6
#逻辑与 两个条件
> subset(data, subject < 3 & sex=="M")
subject sex size
1 1 M 7
> data[data$subject < 3 & data$sex=="M", ]
subject sex size
1 1 M 7
#逻辑或 两个条件
> subset(data, subject < 3 | sex=="M")
subject sex size
1 1 M 7
2 2 F 6
4 4 M 11
> data[data$subject < 3 | data$sex=="M", ]
subject sex size
1 1 M 7
2 2 F 6
4 4 M 11
#对数据操作后的条件筛选
> subset(data, log2(size) > 3 )
subject sex size
3 3 F 9
4 4 M 11
> data[log2(data$size) > 3, ]
subject sex size
3 3 F 9
4 4 M 11
#如果元素在另一元素里
> subset(data, subject %in% c(1,3))
subject sex size
1 1 M 7
3 3 F 9
> data[data$subject %in% c(1,3), ]
subject sex size
1 1 M 7
3 3 F 9