2022年5月20日星期五

数据集合并

如果数据分在在多个地方,需要在继续下一步之前将其合并。

添加列

要横向合并两个数据框(数据集),可以使用merge()函数。

在多数情况下,两个数据框是通过一个或多个共有变量进行联结的(即一种内联结,inner join),例如

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

将dataframeA和dataframeB进行了个并

如果需要直接横向合并两个矩阵或数据框,并且不需要指定一个公共索引,那么可以直接使用cbind()函数:

total <- cbind(A, B)

上述函数将横向合并对象A和对象B。为了让它正常工作,每个对象必须拥有相同的行数,且要以相同的顺序排序。

添加行

要纵向合并两个数据框,请使用rbind()函数

total <- rbind(dataframeA, dataframeB)

两个数据框必须拥有相同的变量,不过他们的顺序不必一定相同。

如果dataframeA中拥有dataframeB中没有的变量,在合并它们之前需要做一些某种处理

  • 删除dataframeA中的多余变量

  • 在dataframeB重创建追加的变量并将其值设为NA

纵向联结通常用于想数据框中添加观测。

2022年5月19日星期四

数据排序


在R中,可以使用order( )函数对一个数据框进行排序。默认的排序顺序是升序,在排序变量的前面加一个减号即可得到降序的排序结果。

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

类型转换


R中提供了一系列用来判断某个对象的数据类型和将其转换为另一种数据类型的函数

表4-5类型转换函数

判断转换
is.numeric()as.numeric()
is.character()as.character()
is.vector()as.vector()
is.matrix()as.matrix()
is.data.frame()as.data.frame()
is.factor()as.factor()
is.logical()as.logical()

is.datatype()这样的函数返回TRUE或FALSE,而as.datatype( )这样的函数则将其参数转换为对应的类型

考虑如下代码

a <- c(1,2,3)
a
is.numeric(a)
is.vector(a)
a <- as.character(a)
a
is.vector(a)
is.character()

日期值

日期值

日期值通常以字符串的形式输入到R中,然后转化为数值形式存储的日期变量。

函数as.Date()用以执行这种转化,它的语法为

as.Date(x "input_format")

其中x是字符型数据,input_format则给出了用于读入日期的适当格式

表4-4日期格式

符号含义示例
%d数字表示的日期(0-31)01~31
%a缩写的星期名Mon
%A非缩写的星期名Monday
%m月份(00~12)00~12
%b缩写的月份Jan
%B非缩写的月份January
%y两位数的年份07
%Y四位数的年份2007

日期值的默认输入格式为yyyy-mm-dd,语句将默认格式的字符型数据转换为对应日期

mydates <- as.Date(c("2007-06-22", "2004-02-13"))

相反,下面的语句使用mm/dd/yyyy格式读取数据

strDates <- c("01/05/1965", "08/16/1975")
dates <- as.Date(strDates, "%m/%d/%Y")

在leadership数据集中,日期是以mm/dd/yyyy的格式编码为字符型变量的。因此

myformat <- "%m/%d/%Y"
leadership$date <- as.Date(leadership$testDate, myformat)

有两个函数对于处理时间戳数据特别使用。

Sys.Date()

可以返回当天的日期

date()

返回当前的日期和时间

可以使用如下语句来输出指定格式的日期值,并且可以提取日期值中的某些部分

format(x, format = "output_format")

例如

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

R的内部在存储日期时,是使用自1970年1月1日依赖的天数表示的,更早的日期则表示为负数。这意味着可以在日期上执行算术运算。例如

stardate <- as.Date("2004-02-13")
enddate <- as.Date("2011-01-22")
days <- enddate - stardate
days

最后,也可以使用函数difftime()来计算时间间隔,并以星期、天、时、分、秒来表示。

today <-Sys.Date()
dob <- as.Date("1956-10-22")
difftime(today, dob, units = "weeks")

2022年5月18日星期三

重命名变量和缺失值

如果对现有的变量名称不满意,你可以交互第或者以编程的方式修改他们。

假设你希望将变量名manager修改为managerID,并将date修改为testDate,可以使用语句

fix(leadership)

上述命令可以调佣一个交互式编辑器。

若以变成方式,reshape包中有一个rename()函数,可用于修改变量名,rename()函数的使用格式为:

rename(dataframe, c(oldname = "newname", oldname = "newname", …))

阅读并理解下面的示例

library(reshape)
leadership <- rename(leadership,
                   c(manager = "managerID", date = "testDate"))

缺失值

在任何规模的项目中,数据都可能由于未作答问题、设备故障或误编码数据的缘故而不完整

在R中,缺失值以符号NA表示。不可能出现的值通过符号NaN来表示

R提供了一些函数,用于识别包含缺失值的观测。函数is.na()允许你检测缺失值是否存在。

假设你有一个向量:

y <- c(1, 2, 3, NA)

然后使用函数

is.na(y)

将返回

c(FALSE, FALSE, FALSE, TRUE)

可见,is.na()函数是作用于一个对象上的。它将返回一个相同大小的对象,如果某个元素是缺失值,相应的位置将被改写为TRUE,不是缺失值的位置则返回FALSE

重新编码某些值为缺失值

可以使用赋值语句将某些值重编码为缺失值

在分析中排除缺失值

在进一步的分析数据之前以某种方式删除这些缺失值。原因是,含有缺失值的算术表达式和函数的计算结果也是缺失值。如下代码:

x <-c(1, 2, NA, 3)

y <- x[1] + x[2] + x[3] + x[4]

z <- sum(x)

事实上y和z也是NA,请思考为什么?

多数的数值函数都有一个na.rm = TRUE选项,可以在计算之前移除缺失值并使用剩余的值进行计算

y <- sum(x, na.rm = TRUE)

这里y等于6

你可以通过na.omit()移除所有含有缺失值的观测,也就是说na.omit()会删除所有含有缺失数据的行。例如下面的代码,仔细体会其区别

leadership
newdata <- na.omit(leadership)
newdata

变量的重编码

变量的重编码

重编码涉及根据同一个变量和/或其他变量的现有值创建新值的过程

要重编码数据,客户似医用R中的一个或多个逻辑运算符

表4-3 逻辑运算符

运算符描述
<小于
<=小于或等于
>大于
>=大于或等于
==严格或等于
!=不等于
!x非x
x|yx或y
x&yx和y
isTRUE(x)测试x是否为TRUE

不妨假设你希望将leadership数据集中经理人连续性年龄变量age重编码为类别性变量agecat(Young、Middle Aged、Elder)。首先,必须将99岁年龄值重编码为缺失值,使用代码为

leadership$age[leadership$age == 99] <- NA

语句variable[condition] <- expression,将会仅在condition的值为TRUE是执行赋值。

在指定好年龄中的缺失值之后,你可以接着使用一下代码创建agecat变量

leadership$agecat[ladership$age > 75] <-"Elder"
ladership$agecat[ladership$age >= 55 & ladership$age <= 75] <-"Middle Aged"
ladership$agecat[ladership$age < 55] <-"Younger"

这段代码可以写成更紧凑的:

leadership <- within(leadership, {
   agecat <- NA
   agecat[age >75] <- "Elder"
   agecat[age >=55 & age <= 75] <- "middle Aged"
   agecat[age <55] <- "Younger"})

函数within()与函数with类似,不同的是它允许你修改数据框


脂肪组织巨噬细胞中的环氧合酶-2限制了肥胖小鼠的脂肪组织功能障碍

肥胖相关并发症在全球范围内导致发病率和死亡率增加。肥胖中脂肪组织的扩张导致低度慢性炎症和代谢失调,导致胰岛素抵抗和代谢综合征。脂肪组织巨噬细胞(Adipose tissue macrophage, ATM)在脂肪组织中积累,是进一步家中脂肪细胞功能障碍的促炎细胞因子的来源。巨噬细胞是环氧合酶(Cyclooxygenase, COX)的丰富来源,COX是前列腺素E2(PGE2)产生的限速酶。

当给小鼠喂食高脂肪饮食(High-Fat Diet,HFD)时,ATM会增加COX-2的表达。选择性骨髓细胞COX-2缺失导致单核细胞募集和ATM增殖增加,导致促炎ATM增加,吞噬能力降低。体重增加和肥胖增加,外周胰岛素敏感性和葡萄糖利用降低,脂肪组织炎症和纤维化增加,以及脂肪组织血管生成异常。HFD配对喂养导致体重类似增加,但具有选择性骨髓细胞COX-2的小鼠仍然表现出外周胰岛素敏感性和葡萄糖利用降低。巨噬细胞PGE2受体亚型EP4的选择性骨髓缺失产生了类似的表型,选择性EP4激动剂改善了ATM COX-2缺失所见的代谢异常。

总之,本研究表明ATM COX-2/PGE2/EP4轴在抑制脂肪组织功能障碍中起重要作用。