发布于 

一些关于 R 语言的知识点

在完成一些作业的过程中,我使用 R 进行数据分析。在编写代码的过程中,一些知识并不是我熟悉的。我在这里对于一些我遇到的基础知识点做了总结。

R 语言问题

输出函数的差异

R 语言中 print,cat 都可以用来输出,但它们之间仍然存在一些差别,例如

  • cat支持转义字符的输出,并且可以方便地连接多个参数

很多教程 1 都有这两者区别的介绍。

修改 Data.frame 的列名2

1
2
3
4
5
6
7
8
a <- c(1,2,3,4)
b <- c(4,5,6,7)
df <- data.frame(a, b)
names(df) <- c('a0','b0')
# 更灵活地
library(dplyr)
df <- rename(df, a1 = a0, b1 = b0)

使用 dplyr3可以更加灵活地对 Dataframe 进行操作,但这里 = 前面是新名字,=后面是旧名字,个人认为有些别扭。

删除 Data.frame 中的列或行

1
2
3
df = data.frame(x = 1:5, y = 6:10, z = 11:15)
df[, -2] # 移除第二列
subset(df, select = -y) # 移除 y 列

总的来说,可以使用 - 运算简单地移除某一行或列,这里也可以使用 c() 来指定多行或多列4

提取 table()的结果

使用 as.data.frame 即可把 table() 的结果转化为数据框形式5

计算时排除 NA

1
2
a = c(1, NA, 3)
sum(a, na.rm = TRUE)

很多函数中都有 na.rm 这一参数。

合并数据框

可以使用 cbind(df1, df2) 以及rbind(df1, df2) 进行合并,或者使用 dplyr 包中的 bind_rowsbind_cols实现相同的效果,并能对名称重复的列重新命名,处理列名不对应的情况6

GGPLOT 问题

添加坐标轴标签7

1
2
3
4
5
6
7
f <- gglpot(data) +  geom_point(aes(x = x, y = y)) + 
xlab('x') +
ylab('y')
#OR
f <- ggplot(data) + geom_point(aes(x = x, y = y)) +
labs(x = 'x', y = 'y')

修改坐标轴文字方向

如果 x 轴或者 y 轴的文字过长,影响显示,可以采用下面的方法进行调整8

1
2
f <- ggplot(data) +  geom_point(aes(x = x, y = y)) + 
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5))

这里的角度以及横纵方向的调整数值可以根据实际需要设置。

统计学问题

如何理解 Diagnostics Plot 的结果

1
2
fit <- lm(y ~ x)
plot(fit)

这是一个简单的线性回归模型,使用 plot 可以方便地绘制出对这一线性模型的诊断结果。对于它的理解可以查看这篇文章9

计算生物多样性指数

对于一份由“样方编号(plotname)”“物种名(species)”“多度(abundance)”变量构成的数据,可以通过这样的方法快速计算生物多样性指数10

1
2
3
4
5
6
7
8
9
10
11
12
13
# 假设数据为 data
library(reshape2)
library(vegan)
# 生成样方 - 物种矩阵
mat <- acast(data,
formula = plotname ~ species ,
value.var = "abundance",
fill = 0)
# 计算生物多样性指数
Shannon.Wiener <- diversity(mat, index = "shannon")
Simpson <- diversity(mat, index = "simpson")
Inverse.Simpson <- diversity(mat, index = "inv")