帮我看看这段代码错哪了mRNAdata1<-select(mRNAdata,matches(colnames(mRNAdata)==sampledata$Barcode))
时间: 2024-02-13 09:05:00 浏览: 66
这段代码中的`matches()`函数使用不正确。`matches()`函数需要传入一个正则表达式模式作为参数,来筛选数据框中的列。而在这个代码中,`matches()`函数的参数是一个逻辑向量,即`colnames(mRNAdata) == sampledata$Barcode`,这是不正确的。
如果你想要选取`mRNAdata`数据框中与`sampledata$Barcode`向量中的值匹配的列,可以使用`intersect()`函数来获取两者的交集,然后使用`select()`函数选取交集中的列,即:
```R
common_cols <- intersect(colnames(mRNAdata), sampledata$Barcode)
mRNAdata1 <- select(mRNAdata, common_cols)
```
在这段代码中,`intersect()`函数用于获取`mRNAdata`数据框中与`sampledata$Barcode`向量中的值匹配的列名,然后将其存储在`common_cols`中。最后,`select()`函数用于选取`mRNAdata`数据框中交集中的列,即与`sampledata$Barcode`向量中的值匹配的列。
需要注意的是,`intersect()`函数返回的是字符向量,因此在使用`select()`函数时,需要将其作为列名传入。
相关问题
KUCUN<-data.frame(KUCUN) yuexiaoshou<-data.frame(yuexiaoshou) colnames(KUCUN)<-c('日期','商品编号','销售数量','进货数量','进货单价') colnames(yuexiaoshou)<-c('日期','月销售金额') KUCUN<-subset(KUCUN,进货单价>=0) KUCUN$剩余数量 <- KUCUN$进货数量 - KUCUN$销售数量 KUCUN$库存结存金额 <- KUCUN$剩余数量 * KUCUN$进货单价 KUCUN$剩余数量[KUCUN$剩余数量 < 0] <- 0
这段代码的作用是先将 KUCUN 和 yuexiaoshou 数据框转化为数据框形式,并设置列名。
接下来,使用 `subset` 函数将进货单价小于0的行从 KUCUN 数据框中删除。然后,计算剩余数量、库存结存金额,并将剩余数量小于0的行的剩余数量设置为0。
具体来说,该代码按照以下步骤进行:
1. 将 KUCUN 和 yuexiaoshou 数据框转化为数据框形式,并设置列名。
```R
KUCUN<-data.frame(KUCUN)
yuexiaoshou<-data.frame(yuexiaoshou)
colnames(KUCUN)<-c('日期','商品编号','销售数量','进货数量','进货单价')
colnames(yuexiaoshou)<-c('日期','月销售金额')
```
2. 使用 `subset` 函数将进货单价小于0的行从 KUCUN 数据框中删除。
```R
KUCUN<-subset(KUCUN,进货单价>=0)
```
3. 计算剩余数量、库存结存金额,并将剩余数量小于0的行的剩余数量设置为0。
```R
KUCUN$剩余数量 <- KUCUN$进货数量 - KUCUN$销售数量
KUCUN$库存结存金额 <- KUCUN$剩余数量 * KUCUN$进货单价
KUCUN$剩余数量[KUCUN$剩余数量 < 0] <- 0
```
分句解释这段代码 #select samples which are common to clinical file 选择临床文件中常见的样本 for (i in cancer_types){ colname_slice(str_c(dir,'\tcga_data',i,'\normalized_rna.csv'),1,12) #cut colnames colname_slice(str_c(dir,'\tcga_data',i,'\normalized_mi.csv'),1,12) } pb <- progress_bar$new(total = length(cancer_types)) for (i in cancer_types){ #intersect rna and clinical df<-read.csv(str_c(dir,'\tcga_data',i,'\normalized_rna.csv'),row.names = 1, check.names = F) df<-df[,!duplicated(colnames(df))] clinic<-read.csv(str_c(dir,'\tcga_data',i,'\TCGA-',i,'-clinical.csv'),row.names = 1, check.names = F) inter<-intersect(colnames(df),clinic[,1]) df<-df[,colnames(df)%in%inter] write.csv(df,str_c(dir,'\tcga_data',i,'\normalized_rna.csv'),quote = F) #intersect miRNA and clinical df<-read.csv(str_c(dir,'\tcga_data',i,'\normalized_mi.csv'),row.names = 1, check.names = F) df<-df[,!duplicated(colnames(df))] inter<-intersect(colnames(df),clinic[,1]) df<-df[,colnames(df)%in%inter] write.csv(df,str_c(dir,'\tcga_data',i,'\normalized_mi.csv'),quote = F) clinic<-clinic[clinic[,1]%in%inter,] write.csv(clinic,str_c(dir,'\tcga_data',i,'\TCGA-',i,'-clinical.csv'),quote = F) pb$tick() } rm(df,clinic,inter,dt)
这段代码的作用是从临床文件中选择常见的样本。首先,使用一个循环遍历变量 `cancer_types` 中的每个元素。在循环内部,通过 `colname_slice()` 函数提取文件路径,并使用 `read.csv()` 函数读取两个不同的文件(normalized_rna.csv 和 normalized_mi.csv),其中 `row.names = 1` 表示将第一列作为行名,`check.names = F` 表示不检查列名。
然后,通过交集操作找到两个数据集中共同存在的列名,并将其保留在数据框 `df` 中。接着,使用 `write.csv()` 函数将 `df` 数据框写入相应的文件路径中。
最后,通过一个进度条对象 `pb` 跟踪循环的进度,并在每次循环迭代中更新进度。循环结束后,使用 `rm()` 函数删除不再需要的变量。
总结起来,这段代码的目标是选择临床文件和两个数据集中共同存在的样本,并将处理后的数据保存到对应的文件中。
阅读全文