R語言的數(shù)據(jù)結(jié)構(gòu)(包含向量和向量化詳細解釋)

更多內(nèi)容請參考《R語言編程藝術(shù)》
———————————————

向量類型是R語言的核心震蒋。深入理解向量對R中數(shù)據(jù)結(jié)構(gòu)及其操作瞳腌,函數(shù)的開發(fā)和應(yīng)用有著重要意義设江。

1 幾個概念:向量询微,向量化葫隙,標量株依,元素驱证,組件,標簽恋腕,原子向量抹锄,遞歸向量

以下敘述參考書籍加自己理解,有敘述不妥的留言

向量vector和標量

個人理解荠藤,向量是有方向的伙单,由大于等于2個元素構(gòu)成的數(shù)據(jù)類型。也就是說哈肖,向量的所有元素必須屬于同種模式(mode)吻育,或數(shù)據(jù)類型(見1.2),比如數(shù)值型淤井,字符型等布疼。其類型可以用typeof()查看。
標量只含有一個元素币狠,在R中沒有0維度或標量類型游两。單獨的數(shù)字或字符串本質(zhì)是一元向量。

> x <- c(3,23,5)
> x
[1]  3 23  5
> length(x)
[1] 3

上面x是三元向量漩绵,并且賦值給了x器罐。[1]表示這行得第一項是輸出結(jié)果的第一項。
x由3個元素組成渐行,分別是3,23,5
長度就是其包含的元素的個數(shù)轰坊。注意區(qū)別后面的列表的長度。

向量有哪些基本類型

兩大類祟印,原子向量和列表(又叫遞歸向量)

原子向量有6種類型:邏輯型肴沫,整型,雙精度型蕴忆,字符型颤芬,復數(shù)型和原始型。整型和雙精度型統(tǒng)稱為數(shù)值型向量。
為什么叫原子型(atomic):向量的元素已經(jīng)是最小的站蝠,不可再分的汰具。
列表型,又叫遞歸型菱魔,因為是列表中可以繼續(xù)包括列表留荔。列表中的“元素”就是列表的各組件,其名稱叫標簽(tag)澜倦。

2向量的循環(huán)補齊

兩個向量使用運算符聚蝶,如果兩個向量長度不同,R會自動循環(huán)補齊(recycle)藻治,也就是它會自動重復較短的向量碘勉,直到與另外一個向量匹配。舉例如下

> c(1,2,3)+c(4,5,6,7,8,9)
[1]  5  7  9  8 10 12
> c(1,2,3,1,2,3)+c(4,5,6,7,8,9)
[1]  5  7  9  8 10 12
> 1+1:8
[1] 2 3 4 5 6 7 8 9
> c(1,1,1,1,1,1,1,1)+c(1,2,3,4,5,6,7,8)
[1] 2 3 4 5 6 7 8 9

有沒有感覺像生物學中的復制桩卵,只是模版決定了待合成的鏈的長度验靡,并不決定其組成序列,影響其組成的是自身雏节。但是當要進行兩者運算的時候胜嗓,必須一一匹配,就像堿基互補配對矾屯,不能錯配。

繼續(xù)看下面這個例子

> x <- matrix(1:6,nrow = 3)
> x
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> length(x)
[1] 6
> x[5]
[1] 5

x是矩陣初厚。有6個元素件蚕。x[5]是第五個元素,值是5产禾,明顯看出排作,矩陣就是向量,按列填充(可以更改填充方向)亚情。

> x+100
     [,1] [,2]
[1,]  101  104
[2,]  102  105
[3,]  103  106

100被重復6次(矩陣的長度)妄痪。相當于縱向拉長,但最終仍然生成矩陣楞件。

> x+c(100,200,300,400,500,600)
     [,1] [,2]
[1,]  101  404
[2,]  202  505
[3,]  303  606

上面這個更清晰看出按列進行填充衫生。

3向量化及向量化函數(shù)

3.1向量輸入,向量或矩陣輸出

向量輸入土浸,向量輸出

向量化就是對向量的每一個元素應(yīng)用函數(shù)罪针,如果一個函數(shù)使用了向量化的運算符,那么它也被向量化了黄伊,代碼運行速度會提升泪酱。
上面的+,還有*,/等都是向量化運算符墓阀。再舉一個>

> c(5,2,4)<c(2,8,0)
[1] FALSE  TRUE FALSE
> c(5,2,8)>7
[1] FALSE FALSE  TRUE

返回的都是邏輯型向量毡惜。記得原則是短的自動循環(huán)補充,然后一一配對斯撮,返回一一配對的向量化結(jié)果(也可能直接輸出矩陣結(jié)果)经伙。

向量輸入,矩陣輸出sapply函數(shù)

舉例:

> z12 <- function(x) return(c(x,x^2))
> z12(4)
[1]  4 16
> z12(1:8)
 [1]  1  2  3  4  5  6  7  8  1  4  9 16 25 36 49 64

輸出結(jié)果都是向量化的吮成。但看起來并不是我們想要的呈現(xiàn)方式橱乱。所以可以轉(zhuǎn)變?yōu)榫仃?/p>

> matrix(z12(1:8),ncol = 2)
     [,1] [,2]
[1,]    1    1
[2,]    2    4
[3,]    3    9
[4,]    4   16
[5,]    5   25
[6,]    6   36
[7,]    7   49
[8,]    8   64

除了上面,如果函數(shù)本身的返回值就是向量粱甫,可用sapply函數(shù)進行簡化泳叠,調(diào)用sapply(x,f)可對x的每一個元素使用函數(shù)f(),并將結(jié)果轉(zhuǎn)化為矩陣茶宵。注意

> sapply(1:8, z12)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    2    3    4    5    6    7    8
[2,]    1    4    9   16   25   36   49   64

直接輸出8*2矩陣危纫。
注意sapply是simplify apply的縮寫,簡化結(jié)果乌庶,但不是簡單种蝶。它也可以用于列表操作,使得結(jié)果輸出不再是列表瞒大,而是向量螃征。類似本處結(jié)果的逆操作。最終目的是讓結(jié)果看起來更自然更簡潔透敌。

3.2向量篩選

篩選filtering就是提取向量中符合一定條件的元素盯滚。

3.2.1生成篩選索引

目的,篩選x中平方值大于8的元素(不是元素位置酗电,是元素本身)

x <- c(5,2,-3,8)
> x <- c(5,2,-3,8)
> x[x*x>8]
[1]  5 -3  8

向量化操作魄藕。x是4元向量,x*x也是4元向量撵术,>是向量運算符背率,所以8實際是進行了循環(huán)補齊,實際是進行了如下比較

x*x>c(8,8,8,8)

返回值是布爾值向量

[1]  TRUE FALSE  TRUE  TRUE

所以實際是用布爾值向量篩選x中的符合條件的元素嫩与,也就是執(zhí)行的是

x[c(TRUE,FALSE,TRUE,TRUE)]

運用上述方式可以篩選另一個向量寝姿,也可以篩選自身。
再看下面這個例子

> x <- c(5,2,-3,8)
> x[x>3] <- 100
[1] 100   2  -3 100
> x[x>3] <- 'up'
> x
[1] "up" "2"  "-3" "up"

第一個是x中大于3的元素賦值為100划滋,結(jié)果仍然是數(shù)值型向量
第二個是x中大于3的賦值為‘up’会油,結(jié)果全部變?yōu)樽址拖蛄?/p>

3.2.2使用subset(好處是自動去除NA值)

> subset(x,x*x>10)
[1] 5 8

3.2.3which:返回元素所處位置

> x <- c(5,2,-3,8)
> which(x*x>10)
[1] 1 4

返回的滿足條件的元素所在的位置。這個對找出滿足條件的元素首次出現(xiàn)的未知很重要古毛,結(jié)合break翻翩。
另外match,%in%也可以進行篩選都许。但這兩個不是向量化函數(shù)。???

3.3向量化的ifelse函數(shù)

ifelse(b,u,v)
b是布爾值向量嫂冻,u和v是向量胶征。返回向量。

> x <- c(5,2,-4,3,0)
> ifelse(x%%2==0,5,12)
[1] 12  5  5 12  5
> ifelse(x>=3,'up', ifelse(x<=-3,'down','no'))
[1] "up"   "no"   "down" "up"   "no"  

可見桨仿,返回值都是向量睛低。其中進行的是x中的每一個元素一次進行ifelse中的邏輯判斷,返回相應(yīng)的值服傍,自動進行了循環(huán)補齊钱雷。所以ifelse是向量化的。

4 常見數(shù)據(jù)結(jié)構(gòu)和向量的關(guān)系及常見操作

4.1矩陣

前已述及吹零,矩陣也是向量罩抗,特殊的向量,包含量阿哥附加的屬性:行和列灿椅。所以套蒂,矩陣也有模式,例如數(shù)值型或字符型茫蛹。但向量不能看做有一列或一行的矩陣操刀。

我對矩陣的比喻是‘神龍擺尾’。從左上角開始到右下角結(jié)束婴洼,有向無環(huán)骨坑。

對矩陣可以進行各種線性代數(shù)運算,矩陣索引柬采,矩陣篩選

矩陣因為是特殊的向量所以可以用向量的方式索引(意義不大)或根據(jù)行列進行索引欢唾。

> z <- matrix(1:24,nrow = 6)
> z
     [,1] [,2] [,3] [,4]
[1,]    1    7   13   19
[2,]    2    8   14   20
[3,]    3    9   15   21
[4,]    4   10   16   22
[5,]    5   11   17   23
[6,]    6   12   18   24
> z[15]
[1] 15
> which(z>17)
[1] 18 19 20 21 22 23 24
> z[2,]
[1]  2  8 14 20
> z[,-c(3:4)]
     [,1] [,2]
[1,]    1    7
[2,]    2    8
[3,]    3    9
[4,]    4   10
[5,]    5   11
[6,]    6   12
> z[2,2]
[1] 8
> z[,2:4]
     [,1] [,2] [,3]
[1,]    7   13   19
[2,]    8   14   20
[3,]    9   15   21
[4,]   10   16   22
[5,]   11   17   23
[6,]   12   18   24
> z[,c(TRUE,FALSE,FALSE,TRUE)]
     [,1] [,2]
[1,]    1   19
[2,]    2   20
[3,]    3   21
[4,]    4   22
[5,]    5   23
[6,]    6   24

上述最后一個很重要,很多運算基于此警没。比如我們想找出第二列大于10的行匈辱。
注意上述返回的結(jié)果振湾,有的是向量有的是矩陣杀迹。

> z[z[,2]>10,]
     [,1] [,2] [,3] [,4]
[1,]    5   11   17   23
[2,]    6   12   18   24

實際進行的是:
z中第二列的每一個元素與10進行比較,所以z[,2]是向量押搪,而10需要自動補齊树酪,實際運行的是

> z[,2]>10
[1] FALSE FALSE FALSE FALSE  TRUE  TRUE

這就把返回值為TRUE的行提取出來了。

4.2對矩陣的行和列調(diào)用函數(shù)

apply函數(shù)(在矩陣的各行和格列上調(diào)用制定的函數(shù))

apply(m,dimcode,f,fargs)

m為矩陣
dimcode為維度編號大州,1代表對每一行應(yīng)用函數(shù)续语,2代表對列應(yīng)用函數(shù)
f是應(yīng)用在行或列上的函數(shù)(內(nèi)部函數(shù),自定義函數(shù)都可以)
fargs是f的可選參數(shù)集

4.3 增加或刪除矩陣的行或列

矩陣一旦產(chǎn)生厦画,其行列固定疮茄,但可以對其重新賦值滥朱。
類似操作可以改變矩陣大小,比如rbind``cbind

> cbind(100,z)
     [,1] [,2] [,3] [,4] [,5]
[1,]  100    1    7   13   19
[2,]  100    2    8   14   20
[3,]  100    3    9   15   21
[4,]  100    4   10   16   22
[5,]  100    5   11   17   23
[6,]  100    6   12   18   24
> rbind(100,z)
     [,1] [,2] [,3] [,4]
[1,]  100  100  100  100
[2,]    1    7   13   19
[3,]    2    8   14   20
[4,]    3    9   15   21
[5,]    4   10   16   22
[6,]    5   11   17   23
[7,]    6   12   18   24

可見,進行了自動補齊力试。

5 列表和數(shù)據(jù)框(都不是向量)

5.1 列表

列表創(chuàng)建及基本結(jié)構(gòu)

向量的元素要求同種類型徙邻,而列表list與向量不同,可以組合多個不同類型的對象畸裳。所以列表不是向量缰犁。但從技術(shù)上來說,列表就是向量怖糊,屬于遞歸型向量(recursive vector)帅容。

看例子

> j <- list(name="Joe",salary=55000,union=T)
> j
$name
[1] "Joe"

$salary
[1] 55000

$union
[1] TRUE

> length(j)
[1] 3
> str(j)
List of 3
 $ name  : chr "Joe"
 $ salary: num 55000
 $ union : logi TRUE

上面這個list有3個組件(又叫列表的元素。其中的joe是元素的內(nèi)容)其標簽(tag)分別是name,salary,union伍伤。并且三個變量的類型不一樣并徘,分別是字符型,數(shù)字型嚷缭,邏輯值饮亏。
注意,列表的長度是3阅爽,是組件(元素)的個數(shù)路幸。
這個地方要理解,因為付翁,這對lapply的應(yīng)用很重要简肴。

列表索引

三種方式訪問列表lst中的組件c,返回值是c的數(shù)據(jù)類型百侧。
lst$c
lst[["c"]]
lst[[i]]

> j$salary
[1] 55000
> j$sa
[1] 55000
> j[[2]]
[1] 55000
> j[["salary"]]
[1] 55000

列表上應(yīng)用apply系列函數(shù)lapply``sapply

lapply=list apply砰识,對每個組件執(zhí)行給定的函數(shù),并返回另一個列表佣渴。

> lapply(list(1:3,1:9), median)
[[1]]
[1] 2

[[2]]
[1] 5

> sapply(list(1:3,1:9), median)
[1] 2 5

可見辫狼,sapply輸出的是向量。還記得上面3.1部分嗎
如果函數(shù)本身的返回值就不是標量辛润,而是向量膨处。則sapply可以自動把向量形式的結(jié)果轉(zhuǎn)化為矩陣輸出
如下

> sapply(1:8,function(x) return(c(x^2, sqrt(x))))
     [,1]     [,2]     [,3] [,4]      [,5]     [,6]      [,7]      [,8]
[1,]    1 4.000000 9.000000   16 25.000000 36.00000 49.000000 64.000000
[2,]    1 1.414214 1.732051    2  2.236068  2.44949  2.645751  2.828427

5.2數(shù)據(jù)框

直觀上看,數(shù)據(jù)框更類似矩陣砂竖,有行和列兩個維度真椿,但是數(shù)據(jù)框與矩陣的不同是,數(shù)據(jù)框的每一列可以是不同的模式mode乎澄。比如一列數(shù)字突硝,一列字符串,一列布爾值置济。
所以解恰,數(shù)據(jù)框可以類比為二維矩陣锋八,當然這里的類比是異質(zhì)性的,因為每個組件的數(shù)據(jù)類型不同护盈。
技術(shù)層面看查库,數(shù)據(jù)框是每個組件長度相等的列表。
數(shù)據(jù)框是實際應(yīng)用中最為常見黄琼。

> d <- data.frame(kids=c("Jack","Jill"),
+                 ages=c(12,10),
+                 stringsAsFactors = FALSE)
> d
  kids ages
1 Jack   12
2 Jill   10

數(shù)據(jù)框的訪問樊销,提取,增加脏款,刪除和矩陣非常類似围苫,不再詳述。
還有合并

apply族函數(shù)在數(shù)據(jù)框中的用法

apply
lapply
sapply

apply

如果數(shù)據(jù)框的每一列的數(shù)據(jù)類型相同撤师,則可以對該數(shù)據(jù)框使用apply函數(shù)剂府。或針對數(shù)據(jù)框中的某些列應(yīng)用剃盾。

lapply和sapply

因為數(shù)據(jù)框技術(shù)上就是列表腺占,所以lapply和sapply可以應(yīng)用于數(shù)據(jù)框。
數(shù)據(jù)框是列表的特例痒谴,數(shù)據(jù)框的列構(gòu)成列表的組件衰伯,所以lapply函數(shù)會作用于數(shù)據(jù)框的每一列,返回返回一個列表积蔚。但未知錯亂意鲸,意義不大。

> lapply(d,sort)
$kids
[1] "Jack" "Jill"

$ages
[1] 10 12

> as.data.frame(lapply(d,sort))
  kids ages
1 Jack   10
2 Jill   12
> apply(d[,-1],2,mean)
 ages score 
 11.0  92.5 
> lapply(d[,-1],mean)
$ages
[1] 11

$score
[1] 92.5

> sapply(d[,-1],mean)
 ages score 
 11.0  92.5

6 因子factor

因子是R中許多強大運算和可視化的基礎(chǔ)尽爆,暴多很多針對表格數(shù)據(jù)的運算怎顾。其來源是統(tǒng)計學中的名義變量(nominal variables),或稱之為分類變量(categorical variables)漱贱。這種變量的本質(zhì)不是數(shù)字槐雾,而是對應(yīng)分類。
因子可以看做附加了更多信息的向量幅狮。

> x <- c(5,12,13,12)
> xf <- factor(x)
> xf
[1] 5  12 13 12
Levels: 5 12 13
> str(xf)
 Factor w/ 3 levels "5","12","13": 1 2 3 2
> unclass(xf)
[1] 1 2 3 2
attr(,"levels")
[1] "5"  "12" "13"
> x <- c(5,12,13,12)
> xf <- factor(x)
> xf
[1] 5  12 13 12
Levels: 5 12 13
> length(x)
[1] 4
> str(xf)
 Factor w/ 3 levels "5","12","13": 1 2 3 2
> unclass(xf)
[1] 1 2 3 2
attr(,"levels")
[1] "5"  "12" "13"

其中值得注意的幾個地方

1 xf包含四個數(shù)值募强,共3個水平(levels,就是xf中不同的數(shù)值)
2 length返回的是數(shù)據(jù)的長度彪笼,而不是水平的個數(shù)
3 unclass要引起注意钻注。其中返回的1232代表的是第1,2,3,2個水平蚂且,在這里這些數(shù)字已經(jīng)重新編碼為水平配猫,而不是數(shù)值2,是水平2.

因子的常用函數(shù)tapply split by

tapply

tapply(x,f,g)其中杏死,x是向量泵肄,f是因子(比如性別捆交,黨派),g是函數(shù)
要求f中每個因子需要與x有想通的長度腐巢。
tapply()執(zhí)行的操作是品追,暫時將x分組,每組對應(yīng)一個因子水平(多個因子對應(yīng)一組因子組合)冯丙,得到x的子向量肉瓦,然后對這些子向量應(yīng)用函數(shù)g()

> ages <- c(25,26,55,37,21,42)
> affils <- c('R','D','D','R','U','D')
> tapply(ages, affils, mean)
 D  R  U 
41 31 21 

第二個例子

> d <- data.frame(list(gender=c("M","M","F","M","F","F"),
+                      age=c(47,59,21,32,33,24),
+                      income=c(55000,88000,32450,76500,12300,45650)))
> d
  gender age income
1      M  47  55000
2      M  59  88000
3      F  21  32450
4      M  32  76500
5      F  33  12300
6      F  24  45650
> tapply(d$income,d$gender,mean)
       F        M 
30133.33 73166.67 

現(xiàn)在假如同時對age和gender感興趣,想知道其每組平均收入胃惜。假如我們以25歲為條件泞莉,那么需要把年齡轉(zhuǎn)化為因子,比如大于25的為1船殉,小于25的為0鲫趁,或其他,用前面的ifelse函數(shù)進行賦值
排列組合利虫,性別2個因子挨厚,年齡2個因子,所以會將收入分為4組糠惫,每組代表性別和年齡的一種組合疫剃,然后對每個組合應(yīng)用函數(shù)。

> d$over25 <- ifelse(d$age>25,'over','under')
> tapply(d$income, list(d$gender,d$over25), mean)
      over under
F 12300.00 39050
M 73166.67    NA

split 只是形成分組

注意硼讽,這點和tapply不同慌申,tapply是將向量分割為組,然后針對每個組應(yīng)用制定函數(shù)理郑。split的基本形式是split(x,f)蹄溉,注意返回的是列表
還有一點注意的是split中x可以是數(shù)據(jù)框您炉,而tapply不可以柒爵。

> split(d$income,d$over25)
$over
[1] 55000 88000 76500 12300

$under
[1] 32450 45650

> as.data.frame(split(d$income,d$over25))
   over under
1 55000 32450
2 88000 45650
3 76500 32450
4 12300 45650

split可以很方便的找出各個因子的索引

> split(1:length(d$over25),d$over25)
$over
[1] 1 2 4 5

$under
[1] 3 6

split與lapply聯(lián)合使用非常方便。

by函數(shù)

假如現(xiàn)在有這么一個需求赚爵,想對不同的性別編碼組分別做年齡對收入的回歸分析棉胀。
tapply好像很適合,因為分組冀膝,應(yīng)用函數(shù)唁奢。但是,tapply的第一個參數(shù)必須是向量窝剖,不能是矩陣或數(shù)據(jù)框麻掸,而回歸分析必須至少兩列的數(shù)據(jù)或數(shù)據(jù)框,其中第一列是被預測的變量赐纱,第二列或多列是預測變量脊奋。所以tapply函數(shù)不能滿足任務(wù)熬北。

> by(d,d$gender,function(m) lm(d$income~d$age))
d$gender: F

Call:
lm(formula = d$income ~ d$age)

Coefficients:
(Intercept)        d$age  
       8493         1199  

--------------------------------------------------------------------- 
d$gender: M

Call:
lm(formula = d$income ~ d$age)

Coefficients:
(Intercept)        d$age  
       8493         1199

by()的調(diào)用和tapply()非常相似,第一個參數(shù)是數(shù)據(jù)诚隙,第二個是分組因子讶隐,第三個是函數(shù)。
tapply是根據(jù)因子水平簡歷索引的分組久又,by會查找數(shù)據(jù)框不同分組的行號巫延,從而產(chǎn)生2個子數(shù)據(jù)框,分別對應(yīng)2個性別水平地消。lm函數(shù)被調(diào)用2次烈评,作了2次回歸分析。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末犯建,一起剝皮案震驚了整個濱河市讲冠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌适瓦,老刑警劉巖竿开,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異玻熙,居然都是意外死亡否彩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門嗦随,熙熙樓的掌柜王于貴愁眉苦臉地迎上來列荔,“玉大人,你說我怎么就攤上這事枚尼√悖” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵署恍,是天一觀的道長崎溃。 經(jīng)常有香客問我,道長盯质,這世上最難降的妖魔是什么袁串? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮呼巷,結(jié)果婚禮上囱修,老公的妹妹穿的比我還像新娘。我一直安慰自己王悍,他們只是感情好破镰,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般啤咽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渠脉,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天宇整,我揣著相機與錄音,去河邊找鬼芋膘。 笑死鳞青,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的为朋。 我是一名探鬼主播臂拓,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼习寸!你這毒婦竟也來了胶惰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤霞溪,失蹤者是張志新(化名)和其女友劉穎孵滞,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸯匹,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡坊饶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了殴蓬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匿级。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖染厅,靈堂內(nèi)的尸體忽然破棺而出痘绎,到底是詐尸還是另有隱情,我是刑警寧澤肖粮,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布简逮,位于F島的核電站,受9級特大地震影響尿赚,放射性物質(zhì)發(fā)生泄漏散庶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一凌净、第九天 我趴在偏房一處隱蔽的房頂上張望悲龟。 院中可真熱鬧,春花似錦冰寻、人聲如沸须教。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轻腺。三九已至乐疆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贬养,已是汗流浹背挤土。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留误算,地道東北人仰美。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像儿礼,于是被迫代替她去往敵國和親咖杂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容