R之基本數(shù)據(jù)管理

創(chuàng)建新變量
算術(shù)運(yùn)算符:

+                                          # 加
-                                          # 減
×                                          # 減
/                                          # 除
^或**                                      # 求冪
x%%y                                       # 求余
x%/%y                                      # 整除, 5%/%2=2

可以對(duì)數(shù)據(jù)框的列通過(guò)運(yùn)算得到新的列

mydata <- data.frame(x1=c(1,2,3), x2=c(2,4,6))
mydata$sumx <- mydata$x1 + mydata$x2
mydata$meanx <- (mydata$1 + mydata$2) / 2

變量重編碼
例如淤刃,需要將連續(xù)型變量修改為類(lèi)別值;將誤編碼值替換為正確值晒他。
邏輯運(yùn)算符:

<                                                   # 小于
<=                                                  # 小于等于
>                                                   # 大于
>=                                                  # 小于等于
==                                                  # 等于
!=                                                  # 不等于
!x                                                  # 非x
x|y                                                 # x或y
x&y                                                 # x且y
isTRUE(x)                                           # x是否為T(mén)RUE

舉例,連續(xù)型變量age編碼為(Young, Middle, Old)

mydate$agecat[mydata$age > 60] <- "Old"
mydate$agecat[mydata$age <= 60 & mydata$age >30] <- "Middle"
mydata$agecat[mydata$age <= 30] <- "Young"
# 更緊湊的寫(xiě)法
mydata <- within(mydata, {
agecat<-NA,
agecat[age>60] <- "Old",
agecat[age<=60 & age>30] <- "Middle",
agecat[age<=30] <- "Young"
})

變量重命名
如果對(duì)現(xiàn)有變量名不滿(mǎn)意逸贾,可以使用fix()以交互式方式在彈出的對(duì)話(huà)框中修改變量名

fix(leadership)

或者陨仅,使用reshape包中的rename函數(shù)

rename(dataframe, c(oldname1="newname1", oldname2="newname2", ...))
# 示例
library(reshape)
leadership <- rename(leadership, c(manager="managerID"))

或者通過(guò)names()來(lái)重命名

names(leadership)[1] <- "managerID"

缺失值
在R中,缺失值以NA表示铝侵,不可能出現(xiàn)的值以NaN表示掂名。可以使用is.na()判斷是否為缺失值哟沫。

y <- c(1,2,3,NA)
is.na(y)
> FALSE FALSE FALSE TRUE

分析時(shí),通過(guò)na.rm=TRUE來(lái)排除缺失值锌介,na.omit()移除所有的包含缺失值的行嗜诀。

sumy <- sum(y, na.rm=TRUE)
newdata <- na.omit(newdata)

日期值
日期值通常以字符串的形式輸入R中猾警,然后轉(zhuǎn)為數(shù)值型的日期變量,as.Date(x, "input_format")隆敢。

%d                   #日期发皿,01-31
%m                   #月份00-12
%y                   #兩位數(shù)的年份
%Y                   #完整的年份
%a                   #縮寫(xiě)的星期名,Mon
%A                   #非縮寫(xiě)的星期名拂蝎,Monday
%b                   #縮寫(xiě)的月份穴墅,Jan
%B                   #非縮寫(xiě)的月份,January

日期的默認(rèn)格式為yyyy-mm-dd

mydates <- as.Date(c("2017-01-01","2017-07-03")) #默認(rèn)格式
dates <- as.Date("01/05/93", "%m/%d/%y")

Sys.Date()返回當(dāng)天日期温自,date()返回當(dāng)前日期和時(shí)間
可以通過(guò)format()將日期以指定形式打印玄货。

today <- Sys.Date()
format(today, "%B %d %Y")

日期可以執(zhí)行算術(shù)運(yùn)算,例如相減得到相隔的天數(shù)悼泌。difftime()則可以按星期松捉、天、時(shí)馆里、分隘世、秒來(lái)表示相隔的時(shí)間。

today <- Sys.Date()
birthday <- as.Date("2010-01-01")
difftime(today, birthday, units="weeks")

日期轉(zhuǎn)為字符型變量:strDates <- as.character(dates)
類(lèi)型轉(zhuǎn)換

類(lèi)型判斷                                            類(lèi)型轉(zhuǎn)換
is.numeric()                                      as.numeric()
is.character()                                    as.character()
is.vector()
is.matrix()
is.data.frame()
is.factor()
is.logical()

數(shù)據(jù)排序
可以使用order()對(duì)一個(gè)數(shù)據(jù)框進(jìn)行排序鸠踪,默認(rèn)為升序丙者,在排序變量前加減號(hào)則可得降序

newdata <- leadership[order(leadership$age), ]
# or
attach(leadership)
newdata <- leadership[order(gender, -age), ]
detach(leadership)

數(shù)據(jù)集合并
列合并,可以通過(guò)merge()通過(guò)一個(gè)或多個(gè)共有變量進(jìn)行聯(lián)結(jié)营密。

total <- merge(dataframeA, dataframeB, by="ID")
total <- merge(dataframeA, dataframeB, by=c("ID","Country"))

直接合并列的話(huà)械媒,可以使用cbind():total <- cbind(A, B),但需保證行數(shù)相同卵贱。
行合并滥沫,使用rbind():total <- rbind(A, B),但需要保證數(shù)據(jù)框擁有相同變量键俱,如不滿(mǎn)足可以先進(jìn)行預(yù)處理兰绣,將未有變量設(shè)置為NA。
數(shù)據(jù)集取子集
選取列子集

newdata <- leadership[, c(6:10)] # 取6-10列
# 通過(guò)列名選擇變量
myvar <- c("q1", "q2")
newdata <- leadership[myvar]

刪除部分列

myvar <- names(leadership) %in% c("q3", "q4")
# 上面可以生成一個(gè)logical向量
newdata <- leadership[!myvar]

選取行子集

# 選擇1-3行
newdata <- leadership[1:3, ]
# 選擇滿(mǎn)足某些條件的行
newdata <- leadership[which(leadership$gender=="M" & leadership$age > 30), ]

其中编振,which()給出了向量中值為T(mén)RUE的下標(biāo)缀辩,例如which(c(TRUE, TRUE, FALSE))為c(1, 2)
綜合,可以使用subset函數(shù)選取滿(mǎn)足條件的行及部分列踪央。

newdata <- subset(leadership, age>=35|age<24, select=c(q1, q2, q3))

隨機(jī)抽樣臀玄,使用sample()函數(shù)產(chǎn)生所需樣本數(shù)的隨機(jī)行號(hào)

# 隨機(jī)抽取大小為3的樣本
mysample <- mydata[sample(1:nrow(mydata), 3, replace=FALSE), ]
# 參數(shù)replace表示無(wú)放回抽樣

SQL語(yǔ)句,通過(guò)sql語(yǔ)句對(duì)數(shù)據(jù)框完成子集選取

library(sqldf)
newdf <- sqldf("select * from mtcars where carb=1 order b y mpg", row.names=TRUE)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末畅蹂,一起剝皮案震驚了整個(gè)濱河市健无,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌液斜,老刑警劉巖累贤,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叠穆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡臼膏,警方通過(guò)查閱死者的電腦和手機(jī)硼被,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)渗磅,“玉大人嚷硫,你說(shuō)我怎么就攤上這事∈加悖” “怎么了仔掸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)风响。 經(jīng)常有香客問(wèn)我嘉汰,道長(zhǎng),這世上最難降的妖魔是什么状勤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任鞋怀,我火速辦了婚禮,結(jié)果婚禮上持搜,老公的妹妹穿的比我還像新娘密似。我一直安慰自己,他們只是感情好葫盼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布残腌。 她就那樣靜靜地躺著,像睡著了一般贫导。 火紅的嫁衣襯著肌膚如雪抛猫。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,806評(píng)論 1 290
  • 那天孩灯,我揣著相機(jī)與錄音闺金,去河邊找鬼。 笑死峰档,一個(gè)胖子當(dāng)著我的面吹牛败匹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播讥巡,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼掀亩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了欢顷?” 一聲冷哼從身側(cè)響起槽棍,我...
    開(kāi)封第一講書(shū)人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后刹泄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體外里,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年特石,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鳖链。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡姆蘸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出芙委,到底是詐尸還是另有隱情逞敷,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布灌侣,位于F島的核電站推捐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏侧啼。R本人自食惡果不足惜牛柒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望痊乾。 院中可真熱鬧皮壁,春花似錦、人聲如沸哪审。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)湿滓。三九已至滴须,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叽奥,已是汗流浹背扔水。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留而线,地道東北人铭污。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像膀篮,于是被迫代替她去往敵國(guó)和親嘹狞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

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