R语言数据拆分

博主的话❤️:

大家好✨,这里是bio🦖。先赞后看养成习惯,还没关注的小伙伴点点关注不迷路。今天是南方的小年,祝福大家小年快乐。



前言

今天继续学习R语言,我们之前已经介绍过了数据合并(R语言合并数据框的行与列),现在来介绍数据的拆分。数据拆分主要使用两个函数分别是split()和subset()函数。


一、split()函数

split()函数用于根据给定条件拆分数据。

#根据给定条件拆分数据,返回保存拆分数据的列表
split(
  x #要拆分的向量或数据框
  f #保存拆分基准的因子
)

再次用我们的老朋友鸢尾花数据集作为例子:

split(iris,iris$Species)
$setosa
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
2           4.9         3.0          1.4         0.2  setosa
3           4.7         3.2          1.3         0.2  setosa
...
$versicolor
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
51           7.0         3.2          4.7         1.4 versicolor
52           6.4         3.2          4.5         1.5 versicolor
53           6.9         3.1          4.9         1.5 versicolor
...
$virginica
    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
101          6.3         3.3          6.0         2.5 virginica
102          5.8         2.7          5.1         1.9 virginica
103          7.1         3.0          5.9         2.1 virginica
...

可以看到整个列表被分成了三部分,分别是 s e t o s a , setosa, setosaversicolor,$virginica。
如果需要对不同品种计算Sepal.Length的均值。可以使用apply()系列函数中的lapply()函数(R语言apply系列函数)。
lapply()函数:

lapply(split(iris$Sepal.Length,iris$Species),mean)
$setosa
[1] 5.006

$versicolor
[1] 5.936

$virginica
[1] 6.588

tapply()函数:

tapply(iris$Sepal.Length,iris$Species,mean)
    setosa versicolor  virginica 
     5.006      5.936      6.588 

二、subset()函数

subset()函数返回符合条件的数据。

#返回向量、矩阵、数据框中符合条件的部分
subset(
  x #对象
  subset #是否要选取数据
)
subset(
  x 
  subset
  select #为数据框时,该参数为要选取的列
)

例如从鸢尾花数据集中选取setosa品种的鸢尾花数据:

subset(iris,Species == "setosa")
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
2           4.9         3.0          1.4         0.2  setosa
3           4.7         3.2          1.3         0.2  setosa
4           4.6         3.1          1.5         0.2  setosa
...

当条件较多时,可以使用and等运算符,例如:

subset(iris,Species == "setosa" & Sepal.Length > 5.0)
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
6           5.4         3.9          1.7         0.4  setosa
11          5.4         3.7          1.5         0.2  setosa
...

selec参数可以选取或者排除特定列。例如:

#选取特定列
subset(iris,select = c(Sepal.Length,Species))
    Sepal.Length    Species
1            5.1     setosa
2            4.9     setosa
3            4.7     setosa
4            4.6     setosa
5            5.0     setosa
...
#排除特定列
subset(iris,select = -c(Sepal.Length,Species)) #添加减号“-”
    Sepal.Width Petal.Length Petal.Width
1           3.5          1.4         0.2
2           3.0          1.4         0.2
3           3.2          1.3         0.2
4           3.1          1.5         0.2
5           3.6          1.4         0.2
...

总结

以上就是今天要讲的内容,看到这里的小伙伴给大恐龙🦖点点赞,点点关注!平时要多加练习,有问题可以留言交流哦!

在R语言中进行Cox回归分析时,为了验证模型的效果和泛化能力,通常需要将数据集分为训练集(Training Set)和测试集(Test Set)。这种拆分可以帮助我们评估模型对未见数据的表现情况。 以下是基于`caret`包或其他常用工具实现的数据拆分步骤及方法: --- ### **1. 使用 `createDataPartition()` 函数** 这是来自 `caret` 包的一个函数,专用于数据拆分,并支持按比例分配样本到训练集和测试集中。 ```r # 加载必要的库 library(survival) library(caret) # 假设有一个名为 "data" 的数据框,目标变量为 status 和 time set.seed(123) # 设置随机种子以便结果可复现 trainIndex <- createDataPartition(data$status, p = 0.7, list = FALSE) trainingSet <- data[trainIndex, ] # 训练集占总数据的70% testingSet <- data[-trainIndex, ] # 测试集占剩余30% dim(trainingSet) # 查看训练集大小 dim(testingSet) # 查看测试集大小 ``` 在这个例子中: - `p=0.7` 表示把70%的数据作为训练集; - 其余部分自动成为测试集。 --- ### **2. 手动设置分割点** 如果不想依赖特定软件包,则可以手动完成类似操作: ```r set.seed(456) sampleSize <- floor(0.7 * nrow(data)) shuffledIndices <- sample(seq_len(nrow(data)), size = sampleSize) trainingSet_manual <- data[shuffledIndices, ] testingSet_manual <- data[-shuffledIndices, ] cat("训练集行数:",nrow(trainingSet_manual), "\n") cat("测试集行数:",nrow(testingSet_manual)) ``` 这里通过简单地打乱索引并选择前一定百分比形成新的子集合。 --- ### **3. Cox回归建模与预测** 接着可以在已划分好的训练集上构建 Cox 回归模型,在测试集上检验其性能。 例如: ```r cox_model <- coxph(Surv(time, status) ~ . , data = trainingSet) summary(cox_model) predicted_values <- predict(cox_model,newdata = testingSet,type="risk") head(predicted_values) ``` 上述代码片段首先创建了基于训练集的Cox比例风险模型;然后利用该模型针对测试集中个体估计生存时间的风险得分值。 --- **注意要点:** - 确保所有重要协变量都包含于最终输入矩阵内避免遗漏信息导致偏差增大。 - 对类别型特征需做适当编码处理如哑变量化等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bio大恐龙

您的打赏是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值