2.4.5 数据框(data frame)的建立
统计分析中一个完整的数据集通常是由若干个观测值组成的,这些观察值不要求是同一类型,也不要求相同长度,在R中称为数据框,但是R中的数据框的意义不同,行和列的意义不一致,行表示观测,列表示变量,显示数据框时左侧会显示观测值的序号。
《1》数据框的直接建立
data.frame();
数据框中的向量必须有相同的长度或长度有倍数关系,如果一个比另一个短,他将按照循环法则“循环”整数次。(如果不是整数倍是要报错的,和前面的赋值循环有点区别)
Example:
> x<-c(12,13,15,17)
> y=1:4
> z = data.frame(Index = y, value = x)
> z
Index value
1 1 12
2 2 13
3 3 15
4 4 17
《2》数据框的间接建立
read.table();
间接建立是指通过外部的文件(.txt;.xls;etc)读取。有header=T没有的区别在于列的框数。
Example:
> foo = read.table(file = 'd:/data.txt', header = T)
> foo
start end
1 12445063 12445979
2 14092846 14093753
3 44885230 44885994
4 46103076 46103330
5 59591409 59591612
> foo = read.table(file = 'd:/data.txt')
> foo
V1 V2
1 start end
2 12445063 12445979
3 14092846 14093753
4 44885230 44885994
5 46103076 46103330
6 59591409 59591612
《3》适用于数据框的函数
max();min();median();var();sd();sum();cumsum();cumprod();cummax();cummin();cov();cor();
summary();pairs();xtabs();
Example:
> foo = read.table(file = 'd:/data.txt', header = T)
> summary(foo)
start end
Min. :12445063 Min. :12445979
1st Qu.:14092846 1st Qu.:14093753
Median :44885230 Median :44885994
Mean :35423525 Mean :35424134
3rd Qu.:46103076 3rd Qu.:46103330
Max. :59591409 Max. :59591612
《4》数据框的小标与子集的提取
数据框的下标的提取与矩阵基本相同。不同的是:对于列可以直接使用变量名提取。
Example:
提取单个元素(记住是中括号,不是小括号)
> foo[2,2]
[1] 14093753
提取一个子集,比如第1,3行,第2列。
> foo[c(1,3),2]
[1] 12445979 44885994
> foo[c(1,3),end]
错误于x[j] : 类别为'closure'的下标不对
> foo[c(1,3),c("end")] #用变量名提取这列。
[1] 12445979 44885994
数据框名¥变量名,提取一列(变量的值)
> foo$start
[1] 12445063 14092846 44885230 46103076 59591409
> foo[,1]
[1] 12445063 14092846 44885230 46103076 59591409
提取满足条件的子集
subset;
> subset(foo,end>mean(end))
start end
3 44885230 44885994
4 46103076 46103330
5 59591409 59591612
《5》数据框中添加新变量
基本方法:
> foo$sqrt_start <- sqrt(foo$start)
> foo
start end sqrt_start
1 12445063 12445979 3527.756
2 14092846 14093753 3754.044
3 44885230 44885994 6699.644
4 46103076 46103330 6789.925
5 59591409 59591612 7719.547
with()函数
> foo$sqrt_end <- with(foo,sqrt(end))
> foo
start end sqrt_start sqrt_end
1 12445063 12445979 3527.756 3527.886
2 14092846 14093753 3754.044 3754.165
3 44885230 44885994 6699.644 6699.701
4 46103076 46103330 6789.925 6789.943
5 59591409 59591612 7719.547 7719.560
transform()函数
> foo <- transform(foo, istart=1/start, iend=1/end)
> foo
start end sqrt_start sqrt_end istart iend
1 12445063 12445979 3527.756 3527.886 8.035315e-08 8.034724e-08
2 14092846 14093753 3754.044 3754.165 7.095799e-08 7.095342e-08
3 44885230 44885994 6699.644 6699.701 2.227904e-08 2.227866e-08
4 46103076 46103330 6789.925 6789.943 2.169053e-08 2.169041e-08
5 59591409 59591612 7719.547 7719.560 1.678094e-08 1.678089e-08
数据框怎么读,写,但是有个问题没有解决,就是删除,也许前面已经解决,所以,慢慢的就知道了,先备注上。