01.认识数据框。- 每一列中每一行都是相同的数据类型。
- 单独的一列可以称为一个向量
02.向量的生成
c(1,2,3,4,5) #生成一串数字
c("a","b","a","s","d","f") #生成字符
1:5 #生成连续的数字
rep("x",times=66) #重复生成
seq(from=5,to=22,by=4) #有规律的序列
rnorm(n=3) #随机
paste0(rep("x",times=3),1:3)
03.对单个向量的操作
x<-c(1,4,6,11) #赋值
x+1
log(x)
sqrt(x) #对向量进行运算
x>3
x==3 #比较运算,生成逻辑值向量
max(x) #最大值
min(x) #最小值
mean(x) #平均值
median(x) #中位数
var(x) #方差
sd(x) #标准差
sum(x) #总和
length(x) #向量个数
unique(x) #去重复,留下唯一
duplicated(x) #看有没有重复,给出逻辑值
table(x) #重复值统计
sort(x) #排序
04.参数的默认值,比如?soft
05.数据类型的转换优先顺序如下。能看出什么吧。怎么应用这一特性后续再记录。 c(1,"a")
c(TRUE,"a")
c(TRUE,FALSE,4)
06.如何统计TRUE 和 FALSE 值有多少个列举了一些方法,还有其他的, a. **使用`sum()`函数**: - 统计`TRUE`:`sum(v)` - 统计`FALSE`:`sum(!v)` b. **使用`length()`和`which()`**: - 统计`TRUE`:`length(which(v))` - 统计`FALSE`:`length(which(!v))` c**使用`table()`函数**: - 直接生成一个包含`TRUE`和`FALSE`计数的表:`table(v)` d. **使用`Filter()`函数**: - 统计`TRUE`:`length(Filter(identity, v))` - 统计`FALSE`:`length(Filter(function(x) !x, v))` e **使用`aggregate()`函数**: - 分组统计:`aggregate(v ~ v, data = data.frame(v), length)` f**使用`dplyr`包的`summarise()`和`group_by()`**: - 更具可读性的方法:`dplyr::summarise(dplyr::group_by(data.frame(v), v), Count = n())` g. **使用`mean()`函数计算比例**,再乘以总数得到数量: - `mean(v) * length(v)` 计算`TRUE`的数量 - `(1 - mean(v)) * length(v)` 计算`FALSE`的数量
06.两个向量的操作向量的比较有哪些 vector1 <- c(4, 8, 15, 16, 23, 42)
vector2 <- c(3, 1, 6, 19, 18, 7)
# 比较基本统计量
sum_v1 <- sum(vector1)
sum_v2 <- sum(vector2)
mean_v1 <- mean(vector1)
mean_v2 <- mean(vector2)
median_v1 <- median(vector1)
median_v2 <- median(vector2)
#逐元素比较:这会检查每个位置的元素是否相等。
vector1 == vector2
#全部相等检查:这会判断两个向量是否在所有位置上完全相同。
identical(vector1, vector2)
# 检查长度
length_equal <- length(vector1) == length(vector2)
# 计算相关性
correlation <- cor(vector1, vector2)
# 输出结果
print(c(sum_v1, sum_v2, mean_v1, mean_v2, median_v1, median_v2, length_equal, correlation))
# 绘图比较
plot(vector1, type='o', col='blue', ylim=c(min(c(vector1, vector2)), max(c(vector1, vector2))))
lines(vector2, type='o', col='red')
向量间计算,结果展示不全,自己尝试 # 基本运算
addition <- vector1 + vector2 # 对两个向量逐元素求和
subtraction <- vector1 - vector2 # 对两个向量逐元素求差
element_multiply <- vector1 * vector2 # 对两个向量逐元素相乘
element_divide <- vector1 / vector2 # 对两个向量逐元素相除
# 统计比较
mean_difference <- mean(vector1) - mean(vector2) # 计算两个向量均值的差异
median_difference <- median(vector1) - median(vector2) # 计算两个向量中位数的差异
variance_ratio <- var(vector1) / var(vector2) # 计算两个向量方差的比例
sd_ratio <- sd(vector1) / sd(vector2) # 计算两个向量标准差的比例
# 相关性和协方差
correlation <- cor(vector1, vector2) # 计算两个向量之间的相关系数
covariance <- cov(vector1, vector2) # 计算两个向量之间的协方差
# 统计测试
t_test_results <- t.test(vector1, vector2) # 对两个向量进行 t 检验
wilcox_test_results <- wilcox.test(vector1, vector2) # 对两个向量进行 Wilcoxon 秩和检验
# 向量操作
combined_vector <- c(vector1, vector2) # 合并两个向量
sorted_vector1 <- sort(vector1) # 对第一个向量进行排序
sorted_vector2 <- sort(vector2) # 对第二个向量进行排序
# 集合操作
union_elements <- union(vector1, vector2) # 获取两个向量的并集
intersect_elements <- intersect(vector1, vector2) # 获取两个向量的交集
setdiff_vector1_vector2 <- setdiff(vector1, vector2) # 获取第一个向量中不在第二个向量中的元素
setdiff_vector2_vector1 <- setdiff(vector2, vector1) # 获取第二个向量中不在第一个向量中的元素
# 输出所有结果
results <- list(
addition = addition,
subtraction = subtraction,
element_multiply = element_multiply,
element_divide = element_divide,
mean_difference = mean_difference,
median_difference = median_difference,
variance_ratio = variance_ratio,
sd_ratio = sd_ratio,
correlation = correlation,
covariance = covariance,
t_test_p_value = t_test_results$p.value,
wilcox_p_value = wilcox_test_results$p.value,
combined_vector = combined_vector,
sorted_vector1 = sorted_vector1,
sorted_vector2 = sorted_vector2,
union_elements = union_elements,
intersect_elements = intersect_elements,
setdiff_vector1_vector2 = setdiff_vector1_vector2,
setdiff_vector2_vector1 = setdiff_vector2_vector1
)
横向连接(c()函数): 使用 c() 函数可以将两个向量端到端地拼接起来,形成一个更长的向量。 combined_vector <- c(vector1, vector2)
combined_vector
纵向连接(rbind()函数): 如果向量的长度相同,你可以使用 rbind() 来纵向连接它们,使每个向量成为新矩阵的一行。 combined_matrix <- rbind(vector1, vector2)
combined_matrix
横向连接(cbind()函数): 类似地,cbind() 函数可以将向量作为列来组合,形成一个两列的矩阵。 combined_matrix <- cbind(vector1, vector2)
combined_matrix
通过paste() 函数连接起来
# 使用默认的空格分隔符连接
combined_vector_space <- paste(vector1, vector2)
# 使用自定义分隔符连接
combined_vector_dash <- paste(vector1, vector2, sep="-")
# 输出结果
print(combined_vector_space)
print(combined_vector_dash)
长度不同的两个向量操作 ==比较,在这个例子中,vector1 和 vector2 的长度分别为 5 和 8。当执行比较 vector1 == vector2 时,R 会尝试通过循环方式扩展 vector1,使其长度与 vector2 相匹配。vector1 会被循环扩展成 c(5, 10, 15, 20, 25, 5, 10, 15)。 比较结果是两个向量的逐元素比较。如果长度不匹配,R 通常会发出一个警告,提醒循环扩展可能带来的问题。 # 已定义的向量
vector1 <- c(5, 10, 15, 20, 25) # 长度为5
vector2 <- c(2, 4, 6, 8, 10, 12, 14, 16) # 长度为8
# 使用 == 进行比较
comparison <- vector1 == vector2
07.%in%的作用在下面这个例子中,vector1 %in% vector2 将检查 vector1 中的每个元素是否存在于 vector2 中。因为 vector1 中只有元素 10 在 vector2 中,所以这段代码的输出将是 FALSE, TRUE, FALSE, FALSE, FALSE,显示 10 存在于 vector2,而其他元素不在 vector2 中。 # 定义向量
vector1 <- c(5, 10, 15, 20, 25) # 长度为5
vector2 <- c(2, 4, 6, 8, 10, 12, 14, 16) # 长度为8
# 使用 %in% 检查 vector1 中的元素是否在 vector2 中
in_vector2 <- vector1 %in% vector2
# 输出结果
print(in_vector2)
在这个示例中,characters %in% specific_chars 生成一个逻辑向量,其中 TRUE 表示该位置的字符是 'A' 或 'B'。table() 函数则统计此逻辑向量中 TRUE 和 FALSE 的数量,从而直接给出 'A' 和 'B' 字符的总数以及不是 'A' 或 'B' 的字符总数。这种方法直接且有效地给出了所需的统计数据。 # 生成一个含有30个随机字母(A到E)的向量
characters <- sample(c('A', 'B', 'C', 'D', 'E'), 30, replace = TRUE)
# 定义要查找的字符
specific_chars <- c('A', 'B')
# 使用 %in% 和 table() 统计特定字符的出现次数
counts <- table(characters %in% specific_chars)
# 打印结果
print(counts)
x==y和x%in%y的差别 假设有两个向量,x 和 y,其中 x 长度为4,如 [1, 2, 3, 4],而 y 长度为3,如 [4, 2, 3]。 - 使用 x == y 比较时,因为 x 和 y 长度不同,R 会自动循环扩展 y 以匹配 x 的长度,变为 [4, 2, 3, 4]。然后逐元素比较,得到结果为 [FALSE, TRUE, TRUE, TRUE]。这种方法适合顺序敏感且需要位置匹配的场景。
- 使用 x %in% y 比较时,会检查 x 中的每个元素是否在 y 中存在,不考虑顺序和长度,结果为 [FALSE, TRUE, TRUE, TRUE]。这种方法用于检查元素的存在性,比如适合成员资格验证。
|